2015-11-17 4 views
5

Ho trovato alcuni strani effetti sul mio tavolo. Voglio creare una tabella con due o più sezioni e nella prima sezione voglio utilizzare celle personalizzate diverse con le altre.Utilizza una cella personalizzata diversa per ogni sezione in UITableView

così ho creato questo sul mio tableView:cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier = @"cell"; 
    if (indexPath.section == 0) { 
     // cell for section one 
     HeaderCell *headerCell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
     if(!headerCell) { 
      [tableView registerNib:[UINib nibWithNibName:@"HeaderCell" bundle:nil] forCellReuseIdentifier:cellIdentifier]; 
      headerCell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
     } 
     headerCell.labelName.text = @"First Section"; 
     return headerCell; 
    } 
    else { 
     // Cell for another section 
     DetailCell *detailCell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
     if (!detailSection) { 
      [tableView registerNib:[UINib nibWithNibName:@"DetailCell" bundle:nil] forCellReuseIdentifier:cellIdentifier]; 
      detailCell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
     } 
     detailCell.textLabel.text = @"Another Section Row"; 
     return detailCell; 
    } 
} 

sulla prima sezione, voglio usare headerCell per la mia fila, quindi utilizzare detailCell sugli altri. Questo codice funziona ma nella sezione due sembra ancora utilizzare headerCell "sotto" detailCell. Ho aggiunto l'etichetta in headerCell.xib e ancora visualizzata sullo detailCell. Vedi questo image.

Penso tutto questo perché uso un identificatore di cella per tutta la sezione. Qualcuno ha una soluzione? Grazie mille.

+0

sì, è necessario utilizzare 2 diversi identificatori di cella. – Gandalf

risposta

9

Ogni tipo di cella personalizzata deve avere il proprio identificativo univoco. Il tuo codice sta tentando di utilizzare lo stesso identificatore di cella per tutte le celle. Quello non funzionerà.

Inoltre, registrare i due tipi di cella in viewDidLoad, non cellForRowAtIndexPath:.

Prova questo:

static NSString *cellIdentifier0 = @"cell0"; 
static NSString *cellIdentifier1 = @"cell1"; 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.section == 0) { 
     // cell for section one 
     HeaderCell *headerCell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier0 forIndexPath:indexPath]; 

     headerCell.labelName.text = @"First Section"; 

     return headerCell; 
    } else { 
     // Cell for another section 
     DetailCell *detailCell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier1 forIndexPath:indexPath]; 

     detailCell.textLabel.text = @"Another Section Row"; 

     return detailCell; 
    } 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    // the rest of your code 

    [self.tableView registerNib:[UINib nibWithNibName:@"HeaderCell" bundle:nil] forCellReuseIdentifier:cellIdentifier0]; 
    [self.tableView registerNib:[UINib nibWithNibName:@"DetailCell" bundle:nil] forCellReuseIdentifier:cellIdentifier1]; 
} 
+0

Grazie mille, rmaddy! –