2009-08-11 9 views
0

Ich versuche herauszufinden, wie benutzerdefinierte UITableViewCell als Nib zu implementieren ... Ich weiß, wie UITableView funktioniert, aber die Implementierung benutzerdefinierter Zelle mit Interface Builder NIB hinzufügen, um die Komplexität ... aber Hilfe Flexibilität .... Si meine Frage ist this:Erfordert die benutzerdefinierte UITableViewCell-Feder eine benutzerdefinierte OBJ-C-Klasse als Dateibesitzer?

Nachdem wir die benutzerdefinierte Zelle in Interface Builder entworfen haben, müssen wir eine benutzerdefinierte Obj-C-Klasse erstellen, die als Dateieigner zugewiesen werden soll, so wie wir es in ViewControlers tun müssen?

Antwort

1

Sie könnten eine benutzerdefinierte Klasse als Eigentümer der Datei verwenden, müssen dies aber nicht tun. Ich zeige Ihnen zwei Techniken zum Laden einer Tabellenzelle aus einer NIB, eine, die den Eigentümer der Datei verwendet, und eine, die das nicht tut.

ohne die Datei des Eigentümers verwendet, hier ist ein Weg, um eine Tabellenzelle aus einem NIB zu laden:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *myCell = [tableView dequeueReusableCellWithIdentifier:@"MyID"]; 
    if (!myCell) { 
     NSBundle *bundle = [NSBundle mainBundle]; 
     NSArray *topLevelObjects = [bundle loadNibNamed:@"MyNib" owner:nil options:nil]; 
     myCell = [topLevelObjects lastObject]; 
    } 
    /* setup my cell */ 
    return myCell; 
} 

Der obige Code, weil in Zukunft zerbrechlich ist, wenn Sie die XIB ändern Weitere Top-Level-Objekte zu haben, Dieser Code wird wahrscheinlich fehlschlagen, indem das falsche Objekt von "[topLevelObjects lastObject]" abgerufen wird. Es ist jedoch auf keine andere Weise zerbrechlich, so dass diese Technik in Ordnung ist.

Um etwas expliziter und robuster zu sein, können Sie den Eigentümer der Datei und eine Steckdose verwenden, anstatt die Objekte der obersten Ebene zu verwenden. Hier ist ein Beispiel dafür:

+0

Ich benutze die erste Methode, wie es scheint von vielen Dev verwendet werden ... Aber, ich bevorzuge die zweite, weil es schließlich gibt mir mehr Kontrolle über das, was wir können in der benutzerdefinierten Klasse tun, um mehr Init-Code zu setzen .... mehr objektorientiert ... – JFMartin

Verwandte Themen