2013-04-23 7 views
7

Quindi ho cercato di utilizzare UITableView'sregisterNib: e [dequeueReusableCellWithIdentifier: forIndexPath:] per caricare un UITableCellView personalizzato da NIB. Qui ci sono i pezzi importanti dal mio controllo:Come assegnare il proprietario del file quando si utilizza UITableView registerNib: per caricare un UITableViewCell personalizzato dal pennino?

- (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; 

così sto registrando la NIB quando i carichi vista e poi lo utilizzano per annullamento dell'accodamento delle cellule. Fino a questo punto tutto funziona come mi aspetto. La mia consueta TVProgramListTableViewCell viene caricata correttamente da NIB ed è IBOutlet collegata.

Il NIB contiene una vista con un pulsante al suo interno che mi piacerebbe avere eventi di fuoco sul controller. Posso impostare il tipo di proprietario del file come la mia classe Table View Controller ma non so come collegare effettivamente il proprietario del file.

Ora, se stavo usando loadNibNamed: e caricando me stesso il NIB, il cablaggio del proprietario del file sarebbe facile. C'è un modo per ottenere questo mentre si utilizza registerNib? Oltre a non essere in grado di cablare il proprietario del file, questo sembra il modo perfetto di utilizzare celle personalizzate in un UITableView.

risposta

2

Per quanto ne so, non c'è modo di impostare il proprietario del file sul controller di visualizzazione tabella e connettere un metodo di azione a un pulsante in un file xib - L'ho provato e si blocca l'app. Il modo in cui viene normalmente eseguito è chiamare addTarget: action: forControlEvents: sul pulsante nel metodo cellForRowAtIndexPath e passare self come target.

+1

Sì, sono tornato a utilizzare loadNibNamed: quando la cella viene rimossa dalla coda. Questo mi consente di impostare il proprietario sul mio controller e di ottenere gli IBOutlet nella mia cella personalizzata. Quindi non c'è bisogno di chiamare addTarget perché posso associare l'evento button a Owner di File in IB e verrà indirizzato al mio controller mentre sto ancora mappando le mie UIViews alle prese nel mio UITableViewCell personalizzato. –

+0

@VilleRinne, penso che la registrazione del pennino sia più efficiente (motivo per cui Apple l'ha introdotta) rispetto al caricamento del pennino per ogni cella che si crea. – rdelmar

+0

Sì, potrebbe essere più efficiente ma non è molto utile se non è possibile associare il controller al proprietario del pennino del file? L'efficienza è davvero un problema comunque, dal momento che il pennino viene caricato solo ogni volta che una cella non può essere rimossa dalla coda? –

Problemi correlati