2013-04-23 3 views
7

So habe ich mit UITableView'sregisterNib: und [dequeueReusableCellWithIdentifier: forIndexPath:] zum Laden eines benutzerdefinierten UITableCellView von einem NIB betrachtet. Hier sind die wichtigsten Bits von meinem Controller:Wie man Besitzer der Datei zuweist, wenn UITableView registerNib verwendet wird: um eine benutzerdefinierte UITableViewCell von der Nib zu laden?

- (void)viewDidLoad 

[super viewDidLoad]; 
self.tableView.bounces = NO; 
[self.tableView registerNib:[UINib nibWithNibName:@"ProgramListViewCell" bundle:nil] forCellReuseIdentifier:@"Cell"]; 



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

TVProgramListTableViewCell *cell = (TVProgramListTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

cell.frame = CGRectMake(0, 0, CELLWIDTH, OPENCELLHEIGHT); 
cell.selectionStyle = UITableViewCellSelectionStyleNone; 
cell.clipsToBounds = YES; 

cell.titleLabel.text = [NSString stringWithFormat:@"herpa derp: %i", indexPath.row]; 

return cell; 

So bin Registrierung ich die NIB, wenn die Ansicht Lasten und dann für die Zell Ausreihen verwendet. Bis zu diesem Punkt funktioniert alles so, wie ich es erwarte. Meine benutzerdefinierte TVProgramListTableViewCell wird ordnungsgemäß von der NIB geladen und es ist IBOutlet verdrahtet wird.

Die NIB enthält eine Ansicht mit einem Knopf darin, die Ich mag würde Feuer Ereignisse an die Steuerung haben. Ich kann den Besitzer der Datei als meine Table View Controller-Klasse festlegen, aber ich weiß nicht, wie man den Eigentümer der Datei tatsächlich verbindet.

Wenn ich nun loadNibNamed: nutze und die NIB selbst lade, wäre die Verkabelung des Eigentümers der Datei einfach. Gibt es eine Möglichkeit, dies unter Verwendung von registerNib zu erreichen? Abgesehen davon, dass es nicht möglich ist, den Eigentümer der Datei zu verkabeln, scheint dies der perfekte Weg zu sein, benutzerdefinierte Zellen in einer UITableView zu verwenden.

Antwort

2

Soweit ich weiß, gibt es keine Möglichkeit, den Eigentümer der Datei zu Ihrem Tabellenansicht-Controller zu setzen und eine Aktionsmethode mit einer Schaltfläche in einer XIB-Datei zu verbinden - ich habe das versucht, und es stürzt die App ab. Die normale Vorgehensweise besteht darin, addTarget: action: forControlEvents: auf Ihrer Schaltfläche in der cellForRowAtIndexPath-Methode aufzurufen und self als Ziel zu übergeben.

+1

Ja, ich ging zurück loadNibNamed zu verwenden: wenn die Zelle aus der Warteschlange entfernt wird. Dies ermöglicht mir, den Besitzer zu meinem Controller zu setzen, sowie die IBOutlets in meiner benutzerdefinierten Zelle zu erhalten. So dass keine Notwendigkeit für den Aufruf addTarget als ich den Knopf Ereignis Datei Besitzer in IB binden kann, und es wird meinen Controller geleitet werden, während immer noch meine UIViews zu den Auslässen in meinem benutzerdefinierten UITableViewCell abbildet. –

+0

@VilleRinne, denke ich, dass die Spitze Registrierung effizienter ist (das ist, warum Apple es eingeführt) als die Spitze für jede Zelle laden, die Sie erstellen. – rdelmar

+0

Ja, es kann effizienter sein, aber es ist nicht sehr nützlich, wenn Sie den Controller nicht an den Besitzer der Datei der Datei binden können? Ist die Effizienz wirklich ein Problem, da die Feder nur dann geladen wird, wenn eine Zelle nicht aus der Warteschlange genommen werden kann? –

Verwandte Themen