2013-04-02 3 views
5

Ho un UIViewController che a un certo punto cresce un UITableView e, quando lo fa, avvio semplicemente la variabile di istanza di TableView e la aggiungo alla vista, ma non sono sicuro di come gestire il dequeue delle celle da aggiungere alla vista ; Ho bisogno di un identificatore di riutilizzo, ma non sono sicuro di come impostarlo.Aggiunta programmatica di UITableView: come si imposta l'identificatore di riutilizzo per le celle?

Cosa faccio con questo metodo?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *cellIdentifier = @"wot"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; 

    return cell; 
} 
+0

Fai la stessa cosa che faresti in qualsiasi implementazione di 'cellForRowAtIndexPath'. Nulla sul modo in cui hai ottenuto la vista tabella cambia il modo in cui funziona una vista tabella. Il codice che hai mostrato è un ottimo inizio. – matt

risposta

7

utilizzare il metodo initWithStyle:reuseIdentifier

  1. controllo se esiste cell
  2. Se così non fosse, allora avete bisogno di inizializzare.

codice

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath*)indexPath 
{ 
    static NSString *cellIdentifier = @"wot"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath]; 

    if (!cell) 
     cell = [[UITableViewCell alloc] initWithStyle: someStyle reuseIdentifier: cellIdentifier]; 

    return cell; 
} 
+0

da iOS 5 in poi non è necessario controllare '! Cell'. http://stackoverflow.com/questions/7946840/dequeuereusablecellwithidentifier-behavior-changed-for-prototype-cells –

+0

Dato che a differenza di IB, dove posso assegnare a tutte le celle un layout specifico con UIViews (UILabel, UIImage, ecc.) fare Devo creare un UILabel e aggiungerlo alla sottoview della cella per ogni cella? –

+0

È possibile creare una sottoclasse di UITableViewCell ed eseguire la configurazione della sottoview specifica lì. – MJN

0

L'identificatore riutilizzo non deve essere esplicitamente defined.In il metodo cellForRowAtIndexPath le definizioni hai incluso in questione è sufficiente per lavorare con

per Reference

Eg

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *MyIdentifier = @"MyReuseIdentifier"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier]]; 
    } 
    Region *region = [regions objectAtIndex:indexPath.section]; 
    TimeZoneWrapper *timeZoneWrapper = [region.timeZoneWrappers objectAtIndex:indexPath.row]; 
    cell.textLabel.text = timeZoneWrapper.localeName; 
    return cell; 
}