2012-05-10 14 views
15

in che modo utilizzare UINib per creare un'istanza e utilizzare UITableViewCell per una vista tabella in iOS5.0. So che c'è un registerNib: forCellReuseIdentifier: in iOS5.0 che ha anche bisogno di essere usato, ma non sono sicuro come usarloCome utilizzare UINib per creare un'istanza e utilizzare UITableViewCells personalizzate

Grazie in anticipo per qualsiasi aiuto su questo

+1

controlla questo link: http://useyourloaf.com/blog/2011/2/28/speeding-up-table-view-cell-loading -with-uinib.html Questo dovrebbe iniziare! :) –

risposta

41
  1. Crea il file XI ter con UITableViewCell come oggetto di livello superiore. Questo è chiamato Cell.xib
  2. Creare un oggetto UINib basato su questo file
  3. Registrare l'UINib con la vista tabella (in genere in viewDidLoad della sottoclasse del controller di visualizzazione tabella).

fasi 2 e 3 possono essere combinati, quindi si può usare la seguente riga nel viewDidLoad:

[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"]; 

Poi, nel cellForRowAtIndexPath, se si desidera che una delle celle del pennino, è dequeue esso :

Questo crea una nuova istanza dal pennino o deseleziona una cella esistente.

+2

In realtà ho appena implementato l'Identificatore di riutilizzo delle celle e funziona perfettamente! –

+1

La tua soluzione è assolutamente corretta ma sfortunatamente c'è un bug in iOS 5 (risolto in iOS 6) in collaborazione con VoiceOver: http://openradar.appspot.com/11549999 –

+0

Al caricamento della cella, voglio personalizzare il colore dello sfondo programmaticamente (perché il colore bg è un'immagine di modello). È possibile? – Satyam

1

La risposta di @jrturtons è corretta ma sfortunatamente c'è un errore in iOS 5 (risolto in iOS 6) in combinazione con VoiceOver: rdar://11549999. La seguente categoria su UITableView risolve il problema. Basta usare -fixedDequeueReusableCellWithIdentifier: invece del normale dequeueReusableCellWithIdentifier:. Naturalmente, il NIB deve essere registrato utilizzando

[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"]; 

prima (in -viewDidLoad).

UITableView + Workaround.m:

@implementation UITableView (Workaround) 
- (id)fixedDequeueReusableCellWithIdentifier:(NSString *)identifier { 
    id cell = [self dequeueReusableCellWithIdentifier:identifier]; 
    if (!cell) { 
     // fix for rdar://11549999 (registerNib… fails on iOS 5 if VoiceOver is enabled) 
     cell = [[[NSBundle mainBundle] loadNibNamed:identifier owner:self options:nil] objectAtIndex:0]; 
    } 
    return cell; 
} 
@end 
+0

Ho letto su questo bug un certo numero di volte, ma non l'ho mai provato - nemmeno su iOS 5.0 quando eseguo VoiceOver. Credo che il problema attuale sia molto più complicato di questo. –

+0

Detto questo, ho il sospetto che la soluzione alternativa funzioni sempre: fantastico! :) –

Problemi correlati