Action: @selector (showAlert :) comment passer le paramètre dans cette méthode de showAlert?

StackOverflow https://stackoverflow.com/questions/1508453

Question

Je suis d'ajouter un bouton personnalisé à mon UITableViewCell. Dans l'action de ce bouton je veux appeler la fonction showAlert: et que vous souhaitez passer l'étiquette cellulaire dans la méthode.

Comment puis-je passer un paramètre dans cette méthode de showAlert: action:@selector(showAlert:)

?
Était-ce utile?

La solution

Ce n'est pas possible. Vous devez créer une méthode conforme à IBAction

- (IBAction)buttonXYClicked:(id)sender;

Dans cette méthode, vous pouvez créer et appeler le UIAlertView. Ne pas oublier de se connecter sur le bouton avec la méthode dans Interface Builder.

Si vous aimez faire la distinction entre plusieurs boutons (par exemple, vous avez un dans chaque cellule de table), vous pouvez définir la propriété de l'étiquette du bouton. Et puis vérifiez sender.tag à partir de laquelle le bouton du clic est.

Autres conseils

Si vous utilisez le bouton dans Tableviewcell puis u doivent ajouter de la valeur de l'étiquette au bouton de chaque cellule et définir la méthode addTarget avec identifiant comme paramètre.

Exemple de code:

Vous devez taper le code ci-dessous dans la méthode de cellForRowAtIndexPath.

{

     // Set tag to each button
        cell.btn1.tag = indexPath.row; 
        [cell.btn1 setTitle:@"Select" forState:UIControlStateNormal];  // Set title 

     // Add Target with passing id like this
        [cell.btn1 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];    


     return cell;

}

-(void)btnClick:(id)sender
{

    UIButton* btn = (UIButton *) sender;

     // here btn is the selected button...
        NSLog(@"Button %d is selected",btn.tag); 


    // Show appropriate alert by tag values
}

La réponse de Jay est grande, mais si vous avez plusieurs sections, il ne fonctionnera pas car le indexRow est à une section .

Une autre méthode, si vous utilisez des boutons dans un TableView qui comporte plusieurs sections, est de passer les événements tactiles.

Si vous déclarez votre bouton dans un chargeur paresseux:

- (UIButton *)awesomeButton
{
    if(_awesomeButton == nil)
    {
        _awesomeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [_awesomeButton addTarget:self.drugViewController action:@selector(buttonPressed:event:) forControlEvents:UIControlEventTouchUpInside];
    }

    return _awesomeButton;
}

La clé ici est la chaîne vos événements sur la méthode de sélection. Vous ne pouvez pas passer vos propres paramètres, mais vous pouvez passer les événements.

La fonction du bouton est accroché à:

- (void)buttonPressed:(id)sender event:(id)event
{
    NSSet *touches = [event allTouches];
    UITouch *touch = [touches anyObject];

    CGPoint currentTouchPosition = [touch locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];

    NSLog(@"Button %d was pressed in section %d",indexPath.row, indexPath.section);
}

La clé ici est la fonction indexPathForRowAtPoint. Cette fonction est en nifty UITableView qui vous donnera la indexPath à tout moment. Il est également important de la fonction locationInView parce que vous avez besoin du contact dans le contexte de la tableView afin qu'il puisse identifier le indexPath spécifique.

Cela vous permettra de savoir quel bouton il était, dans une table avec plusieurs sections.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top