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!

InformationsquelleAutor gigahari | 2012-07-26

Schreibe einen Kommentar