Delegierte sind der richtige Weg.
Wie bei anderen Antworten zu sehen, kann die Verwendung von Ansichten veraltet sein. Wer weiß, dass es morgen möglicherweise einen anderen Wrapper gibt, der möglicherweise verwendet werden muss cell superview]superview]superview]superview]
. Und wenn Sie Tags verwenden, erhalten Sie am Ende n Bedingungen für die Identifizierung der Zelle. Um all dies zu vermeiden, richten Sie Delegierte ein. (Auf diese Weise erstellen Sie eine wiederverwendbare Zellenklasse. Sie können dieselbe Zellenklasse als Basisklasse verwenden und müssen lediglich die Delegatmethoden implementieren.)
Zuerst benötigen wir eine Schnittstelle (Protokoll), die von der Zelle verwendet wird, um Tastenklicks zu kommunizieren (zu delegieren). ( Sie können eine separate .h-Datei für das Protokoll erstellen und sowohl in den Tabellenansichts-Controller als auch in benutzerdefinierte Zellenklassen aufnehmen ODER sie einfach in eine benutzerdefinierte Zellenklasse einfügen, die ohnehin in den Tabellenansichts-Controller aufgenommen wird. )
@protocol CellDelegate <NSObject>
- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data;
@end
Fügen Sie dieses Protokoll in den benutzerdefinierten Controller für Zellen- und Tabellenansichten ein. Stellen Sie sicher, dass der Table View Controller dieses Protokoll bestätigt.
Erstellen Sie in einer benutzerdefinierten Zelle zwei Eigenschaften:
@property (weak, nonatomic) id<CellDelegate>delegate;
@property (assign, nonatomic) NSInteger cellIndex;
UIButton
Klicken Sie im IBAction-Delegat auf: (Dasselbe kann für jede Aktion in einer benutzerdefinierten Zellenklasse durchgeführt werden, die zurück delegiert werden muss, um den Controller anzuzeigen. )
- (IBAction)buttonClicked:(UIButton *)sender {
if (self.delegate && [self.delegate respondsToSelector:@selector(didClickOnCellAtIndex:withData:)]) {
[self.delegate didClickOnCellAtIndex:_cellIndex withData:@"any other cell data/property"];
}
}
cellForRowAtIndexPath
Legen Sie in der Tabellenansicht-Steuerung nach dem Entfernen der Zelle die obigen Eigenschaften fest.
cell.delegate = self;
cell.cellIndex = indexPath.row; // Set indexpath if its a grouped table.
Und implementieren Sie den Delegaten in Table View Controller:
- (void)didClickOnCellAtIndex:(NSInteger)cellIndex withData:(id)data
{
// Do additional actions as required.
NSLog(@"Cell at Index: %d clicked.\n Data received : %@", cellIndex, data);
}
Dies wäre der ideale Ansatz, um benutzerdefinierte Aktionen für Zellenschaltflächen im Table View Controller abzurufen.