Wie kann ich eine uitableViewCell von indexPath erhalten?


70

Wie komme ich UITableViewCelldurch indexPath? So was:

Ich verwende die UIActionSheet, wenn ich auf Bestätigen UIButtonklicke, möchte ich den Zellentext ändern.

Den nowIndex definiere ich als Eigenschaft

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0)
    {
        NSInteger section =  [nowIndex section];
        NSInteger row = [nowIndex row];
        NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
        formatter.dateFormat = @"yyyy-MM-dd";

        if (section == 0)
        {
            if (row == 0)
            {

            }
            else if (row == 1)
            {
                UILabel *content = (UILabel *)[[(UITableView *)[actionSheet ] cellForRowAtIndexPath:nowIndex] viewWithTag:contentTag];
                content.text = [formatter stringFromDate:checkInDate.date];
            }
            else if (row == 2)
            {

            }
        }
    }
}

Antworten:


118
[(UITableViewCell *)[(UITableView *)self cellForRowAtIndexPath:nowIndex]

gibt Ihnen uitableviewcell. Aber ich bin mir nicht sicher, wonach Sie genau fragen! Weil Sie diesen Code haben und immer noch fragen, wie Sie eine geeignete Ansichtszelle erhalten. Einige weitere Informationen helfen Ihnen bei der Beantwortung :)

ADD: Hier ist eine alternative Syntax, die dasselbe ohne die Besetzung erreicht.

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:nowIndex];

1
Technisch gesehen möchten Sie dies für jede dataSourceEigenschaft Ihrer tableView aufrufen, aber normalerweise ist dies der Fall self.
devios1

27

Schließlich erhalte ich die Zelle mit dem folgenden Code:

UITableViewCell *cell = (UITableViewCell *)[(UITableView *)self.view cellForRowAtIndexPath:nowIndex];

Weil die Klasse erweitert ist UITableViewController:

@interface SearchHotelViewController : UITableViewController

Das selfist also "SearchHotelViewController".


1
Das Benennen einer Klassenansicht (..) ist verwirrend, wenn es sich um eine Unterklasse von UIViewController handelt.
Johnyu

27

Hier ist ein Code zum Abrufen einer benutzerdefinierten Zelle aus dem Indexpfad

 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:2 inSection:0];
 YourCell *cell = (YourCell *)[tblRegister cellForRowAtIndexPath:indexPath];

Für Swift

let indexpath = NSIndexPath(forRow: 2, inSection: 0)
let currentCell = tblTest.cellForRowAtIndexPath(indexpath) as! CellTest

Für Swift 4 (für Sammlungsansicht)

let indexpath = NSIndexPath(row: 2, section: 0)
let cell = self.colVw!.cellForItem(at: indexpath as IndexPath) as? ColViewCell

Wenn zwei benutzerdefinierte Zellen vorhanden sind und ich wissen muss, welcher Zelltyp auf diesem Indexpfad zurückgegeben wird. Was wäre der beste Ansatz, um den Typ zu bekommen?
Martín Serrano

11

Für Swift 4

    let indexPath = IndexPath(row: 0, section: 0)
    let cell = tableView.cellForRow(at: indexPath)

7

Sie können den folgenden Code verwenden, um die letzte Zelle abzurufen.

UITableViewCell *cell = [tableView cellForRowAtIndexPath:lastIndexPath];

6

Ich bin nicht ganz sicher, was Ihr Problem ist, aber Sie müssen den Parameternamen so angeben.

-(void) changeCellText:(NSIndexPath *) nowIndex{
    UILabel *content = (UILabel *)[[(UITableViewCell *)[(UITableView *)self cellForRowAtIndexPath:nowIndex] contentView] viewWithTag:contentTag];
    content.text = [formatter stringFromDate:checkInDate.date];
}

Hallo David, ich schreibe die Frage um, kannst du sie wieder sehen
Phpxiaoxin

4

Swift 3

let indexpath = NSIndexPath(row: 0, section: 0)
let currentCell = tableView.cellForRow(at: indexpath as IndexPath)!

4

Schnell

let indexpath = IndexPath(row: 0, section: 0)
if let cell = tableView.cellForRow(at: indexPath) as? <UITableViewCell or CustomCell> {
    cell.backgroundColor = UIColor.red
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.