Les délégués sont la voie à suivre.
Comme vu avec d'autres réponses, l'utilisation de vues peut devenir obsolète. Qui sait demain il y aura peut-être un autre wrapper et devra peut-être l'utiliser cell superview]superview]superview]superview]
. Et si vous utilisez des balises, vous obtiendrez un nombre n de conditions if else pour identifier la cellule. Pour éviter tout cela, configurez des délégués. (Ce faisant, vous allez créer une classe de cellule réutilisable. Vous pouvez utiliser la même classe de cellule comme classe de base et tout ce que vous avez à faire est d'implémenter les méthodes déléguées.)
Nous avons d'abord besoin d'une interface (protocole) qui sera utilisée par la cellule pour communiquer les clics de bouton (déléguer). ( Vous pouvez créer un fichier .h distinct pour le protocole et l'inclure à la fois dans le contrôleur de vue table et dans les classes de cellules personnalisées OU simplement l'ajouter dans la classe de cellule personnalisée qui sera de toute façon incluse dans le contrôleur de vue table )
@protocol CellDelegate <NSObject>
- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data;
@end
Incluez ce protocole dans le contrôleur de vue de cellule et de tableau personnalisé. Et assurez-vous que le contrôleur de vue de table confirme ce protocole.
Dans une cellule personnalisée, créez deux propriétés:
@property (weak, nonatomic) id<CellDelegate>delegate;
@property (assign, nonatomic) NSInteger cellIndex;
Dans le UIButton
délégué IBAction, cliquez sur: ( même chose peut être faite pour toute action dans la classe de cellule personnalisée qui doit être déléguée au contrôleur de vue )
- (IBAction)buttonClicked:(UIButton *)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickOnCellAtIndex:withData:)]) {
[self.delegate didClickOnCellAtIndex:_cellIndex withData:@"any other cell data/property"];
}
}
Dans le contrôleur de vue de table cellForRowAtIndexPath
après avoir retiré la cellule, définissez les propriétés ci-dessus.
cell.delegate = self;
cell.cellIndex = indexPath.row; // Set indexpath if its a grouped table.
Et implémentez le délégué dans le contrôleur de vue table:
- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data
{
// Do additional actions as required.
NSLog(@"Cell at Index: %d clicked.\n Data received : %@", cellIndex, data);
}
Ce serait l'approche idéale pour obtenir des actions de bouton de cellule personnalisées dans le contrôleur de vue tableau.