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)
            {

            }
        }
    }
}
Phpxiaoxin
quelle

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];
Manjunath
quelle
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".

Phpxiaoxin
quelle
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
Hardik Thakkar
quelle
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)
Celil Bozkurt
quelle
7

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

UITableViewCell *cell = [tableView cellForRowAtIndexPath:lastIndexPath];
Hardik Mamtora
quelle
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];
}
David Kanarek
quelle
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)!
Oscar
quelle
4

Schnell

let indexpath = IndexPath(row: 0, section: 0)
if let cell = tableView.cellForRow(at: indexPath) as? <UITableViewCell or CustomCell> {
    cell.backgroundColor = UIColor.red
}
Krunal
quelle