Wie bekomme ich UITableViewCell-Objekt aus einem UIButton action-Methode?
Ich habe eine UITableView, in dem ich einen UIButton als Zubehör view für jede Zelle. Beachten Sie, dass ich die tag-der-Taste die aktuelle Zeile für die zukünftige Verwendung.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//Configure the cell...
if(cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
cellButton = [UIButton buttonWithType:UIButtonTypeCustom];
cellButton.frame = CGRectMake(0, 0, 30, 30);
[cellButton setBackgroundImage:[UIImage imageNamed:@"cellButton.png"] forState:UIControlStateNormal];
[cellButton addTarget:self action:@selector(cellButtonAction:) forControlEvents:UIControlEventTouchUpInside];
cellButton.tag = indexPath.row; //<= Will use this in the next method
cell.accessoryView = cellButton;
}
//Load cell with row based data
return cell;
}
Nun, wenn eine dieser Tasten ist abgegriffen, die ich brauche, um Veränderungen in der Zelle. Also ich umsetzen cellButtonAction, wo ich den tag benutzen, um wieder die Zelle:
-(void)editCommentButtonAction:(id)sender
{
UIButton *button = sender;
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:button.tag inSection:0];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
[self makeChangesToCell:cell];
}
Aber dies scheint wie eine sehr Runde über Weg. Gibt es eine bessere Möglichkeit, dies zu tun?
möglich, Duplikat der Erkennen, welche UIButton gedrückt wurde in einer UITableView
Kein sauberer Weg - sein, wie wir alle es tun. BTW verschieben Sie diese Linie "cellButton.tag = indexPath.Zeile;" aus der if(cell == nil) so ist es immer gemacht (sonst der tag wird nie aktualisiert, wenn Sie recyceln).
es ist nicht, wie wir alle tun es, tags zu saugen. Siehe meine Antwort in here für die, IMHO, eine weit überlegene Methode ist.
Sie haben einen guten Punkt - ein weiterer möglicher überlegene Art und Weise, es zu tun. Das heißt, ich persönlich Neige dazu, verwenden Sie tags für alle Arten von Dingen zu finden, die bestimmten label zu sagen update einen Preis etc. Also ich bin komfortabelste, dies zu tun. Wie jeder sagt, YMMV 🙂
jrturton, gute Idee! @DavidH hat sich die Zuordnung aus. Aber was würden Sie tun, wenn es gab viele Abschnitte? Diese Regelung kann nicht funktionieren!
Kein sauberer Weg - sein, wie wir alle es tun. BTW verschieben Sie diese Linie "cellButton.tag = indexPath.Zeile;" aus der if(cell == nil) so ist es immer gemacht (sonst der tag wird nie aktualisiert, wenn Sie recyceln).
es ist nicht, wie wir alle tun es, tags zu saugen. Siehe meine Antwort in here für die, IMHO, eine weit überlegene Methode ist.
Sie haben einen guten Punkt - ein weiterer möglicher überlegene Art und Weise, es zu tun. Das heißt, ich persönlich Neige dazu, verwenden Sie tags für alle Arten von Dingen zu finden, die bestimmten label zu sagen update einen Preis etc. Also ich bin komfortabelste, dies zu tun. Wie jeder sagt, YMMV 🙂
jrturton, gute Idee! @DavidH hat sich die Zuordnung aus. Aber was würden Sie tun, wenn es gab viele Abschnitte? Diese Regelung kann nicht funktionieren!
InformationsquelleAutor gigahari | 2012-07-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also vorausgesetzt, dass die Schaltfläche in der
contentView
direkt:Fragen "
sender
" (also die Taste) für seine superview, die die Zelle contentViewbitten, dass anzeigen für seine
superView
, die die ZelleFragen, die tabview für den index der Zelle:
- (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell
EDIT: Tatsächlich, ich verwenden Sie einen Allgemeinen Zweck, Methode oder Funktion, nur geht die superviews, auf der Suche nach einer Sicht, die "KindOf" eine UITableViewCell oder eine UICollectionViewCell. Funktioniert wie ein champ!
Den code in Swift:
}
InformationsquelleAutor David H
Können Sie es tun in einen einfacheren Weg. Erhalten Sie die table-view Zelle mit dem sender-parameter.
Überprüfen Sie den folgenden code.
Hier,
sender
Typid
zu einemUIButton
superview
des Taste, es wird Ihnen dieUITableViewCell
InformationsquelleAutor Midhun MP
Können Sie die Zelle wie folgt.
InformationsquelleAutor Nishitha
Ich hatte die gleiche situation, die Sache ist die, ich hatte eine Bildansicht in meine Zellen von Tabellen, und ich möchte die Zelle mit der Bildansicht, die ich getappt..
Den NSLog Teil ausdrucken sollte die richtige Zeile und Abschnitt der abgegriffenen Bildansicht.. Nur den code Ändern. 😉
InformationsquelleAutor Jenn Eve
Diese wird in allen Fällen funktionieren wie ios 6 und ios 7. in ios 7 eine zusätzliche Ansicht Hinzugefügt, in der Zelle (Inhalt anzeigen).
wenn Sie [[sender superview] superview] es wird in einigen Fällen fehlschlagen.
InformationsquelleAutor Vijay
Den Weg, den ich in der Regel tun dies:
Den tag-was ist ein echter hack, und es wird nicht funktionieren, wenn Sie mehr als einen Abschnitt.
Der sender superview brechen, wenn Sie die Reihenfolge der Ansichten in Ihrer Miene.
Für diesen speziellen Fall (Zubehör anzeigen), gibt es nicht eine spezielle Tisch-delegate-Methode?
InformationsquelleAutor kra