2012-03-22 15 views
7

Nelle app iOS, è necessario registrare i file di pennini con la nostra visualizzazione tabella prima di poter utilizzare UITableView#dequeueReusableCellWithIdentifier.Come posso verificare se un identificatore di riutilizzo è già stato registrato con un UITableView?

Esempio:

static NSString *myReuseIdentifier = @"MyReuseIdentifier"; 
UINib *cellNib = [UINib nibWithNibName:myReuseIdentifier bundle:nil]; 
[self.tableView registerNib:cellNib forCellReuseIdentifier:myReuseIdentifier]; 

C'è un modo per verificare se un pennino è già stato registrato con un UITableView?

Ho una cella personalizzata che uso in varie tabelle su diversi controller nella mia app. Mi piacerebbe spostare parte del codice in una macro. Qualcosa di simile

-(CustomCell *)customCell:(UITableView *)tableView 
{ 
    static NSString *reuseIdentifier = @"MyReuseIdentifier"; 
    if (![table hasAlreadyRegisteredNib:reuseIdentifier]){ 
     UINib *cellNib = [UINib nibWithNibName:reuseIdentifier bundle:nil]; 
     [self.tableView registerNib:cellNib forCellReuseIdentifier:reuseIdentifier];  
    } 
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; 
    return cell; 
} 
+0

Perché non registrare il pennino nel metodo viewDidLoad? – JiaYow

+0

Perché vorrei incollarlo in una macro condivisa tra più controller – bodacious

+0

Tuttavia, poiché sono presenti varie tabelle, è necessario registrare il pennino per ogni tabella. –

risposta

4

io non sono sicuro se che ciò che si intende, ma

-dequeueReusableCellWithIdentifier: 

rendimenti nil se la cella non è pronto per il riutilizzo. Altrimenti restituisce la cella, quindi puoi semplicemente provare.

+0

Ottimo consiglio! Quindi posso controllare se la cella era nulla, se così registro il pennino con il tavolo e poi restituisco la cella! grazie – bodacious

+0

Prestare attenzione quando si dipende da zero per registrare il NIB su iOS 5. C'è un bug quando VoiceOver è abilitato: in questo caso restituisce sempre zero. Quindi finirebbe in un loop di registrazione infinito. Maggiori dettagli: http://stackoverflow.com/a/13881778/235297 –

0

Credo che il punto registerNib:forCellReuseIdentifier: sia quello di ridurre il codice di caldaia. Potresti semplicemente chiamarlo una volta nel tuo metodo viewDidLoad?

+0

Stavo cercando di evitare di ripetere lo stesso codice su più controller - Ho scritto questo come una macro invece – bodacious

Problemi correlati