2012-04-02 50 views
2

Ich bin neu in der iPhone-Entwicklung. Ich bin mit einem Problem stecken geblieben. Ich möchte eine Checkbox-Funktion in meinem UITableView implementiert. Aber meine UITableViewCells sind benutzerdefinierte Zellen, die aus Bild und 3 UILabels bestehen. Ich könnte eine Unteransicht in die Tabellenansicht bringen, damit das Kontrollkästchenbild platziert werden kann und ich darin erfolgreich bin. Aber das Problem kommt, wenn ich auf das Bild klicke, wird nur das letzte Zelle-Kontrolle-Kästchen geändert. Ich möchte auf die Zelle zugreifen, auf die ich geklickt habe.Zugriff auf die Zelle in der Tabellenansicht?

Ich habe versucht, diese

UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath] 

Aber diese stürzt da Zelle Brauch ist.

Kann mir jemand eine gute Methode vorschlagen, das zu tun?

+0

Post mehr Code hilft. Veröffentlichen Sie die Fehlermeldungen ab wann es abstürzt. – Ali

+1

Warum möchten Sie auf die Zelle zugreifen, die berührt wird? Sie sollten sich nur mit den DATEN befassen, nicht mit der ZELLE. Die Zelle dient nur dazu, die Daten anzuzeigen, und die Daten werden in Ihrem Modell gespeichert (suchen Sie MVC, wenn Sie sich nicht sicher sind). –

+0

Mit '- (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath' Sie haben den Index ausgewählt, mit' indexPath.row' Sie erhalten die Zelle, die der Benutzer ausgewählt hat. – Hemang

Antwort

8

Anstelle der Verwendung von

UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath] 

Versuchen Sie es mit

YourCustomCell *cell = (YourCustomCell *)[self.tableView cellForRowAtIndexPath:indexPath]; 

Hope it

+0

danke mann es funktioniert – user1288402

+0

@ user1288402 sind Sie herzlich willkommen. Bitte vergessen Sie nicht, die Antwort als richtig zu markieren, wenn es geholfen hat. Es wird die Benutzer ermutigen, Ihre Fragen in der Zukunft zu beantworten. – Novarg

+0

danke: D wirklich gut –

1

In Ihrem Tableview DidSelect Delegatmethode

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    UIImageView *image = [cell.contentView viewWithTag:15]; 
    //You should have set the tag value as 15 when creating the image in cell 
    //and you should have added to the cell contentview 

} 

Wenn Sie die Zelle bekommen kippe können dann wahrscheinlich würden Sie nicht das Konzept wieder verwendbaren Zelle korrekt verwendet haben. Stellen Sie also Ihren gesamten Cellforrow-Index-Code ein.

Wenn Sie die Art der Prüfung verwenden. Warum verwenden Sie nicht das Standard-Disclosure-Kennzeichen von tableview anstelle Ihres Bildes?

2

Zunächst einmal müssen Sie einen Tag definieren -

#pragma imageViewTag 1 

dann in Ihrem cellForRowAtIndexPath assign diesen Tag zu Ihrem Bild Ansicht

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

dann können Sie Ihr Bild zugreifen Ansicht, wo jeder mit der Hilfe dieses Tags als -

UITableViewCell *cellView = (UITableViewCell*) [tblView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]]; 

UIImageView *imgView = (UIImageView*) [cellView viewWithTag:imageViewTag]; 
Verwandte Themen