2013-07-25 1 views
11

Я хочу добавить 2 или более различных пользовательских ячейки в один Tableview, используя раскадровку. Я знаю, как добавить разные ячейки без раскадровки. Я всегда делаю это следующим образом:Как добавить различные пользовательские ячейки в один TableView с раскадровки?

static NSString *CellIdentifier = @"Cell"; 
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
//pictureCell = [[DetailPictureCell alloc]init];//(DetailPictureCell *)[tableView dequeueReusableCellWithIdentifier: CellIdentifier]; 
pictureCell.header = true; 
[pictureCell setHeader]; 
if (cell == nil) { 
    if ([indexPath row] == 0) { 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"HeaderAngebotViewCell" owner:self options:nil]; 
     NSLog(@"New Header Cell"); 
} 
    if([indexPath row] ==1){ 
    NSArray *nib = [[NSBundle mainBundle]loadNibNamed:@"productCell" owner:self options:nil]; 
     cell = [nib objectAtIndex:0]; 
} 

И теперь мой вопрос: как я могу сделать это с раскадрой? Добавить одну специальную ячейку можно. Но я не могу добавить две разные ячейки. Не могли бы вы мне помочь?

ответ

30

В инспекторе атрибутов для представления таблицы выберите «Динамические прототипы» и ниже, чтобы выбрать количество прототипов. Дайте каждой ячейке другой идентификатор и при удалении ячеек в cellForRowAtIndexPath используйте соответствующий идентификатор на основе indexPath.

enter image description here

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *identifier; 
    if (indexPath.row == 0) { 
     identifier = @"OneCellId"; 
    } else if (indexPath.row == 1) { 
     identifier = @"OtherCellId"; 
    } 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; 

    //configure cell... 
} 
+0

спасибо! Вы можете разместить пример того, как он работает с соответствующим идентификатором на основе индексного пути? –

+0

большое спасибо :) –

+0

Я сделал это, как вы сказали. И я получаю сообщение об ошибке. «Источник данных Tableview должен вернуть ячейку из tableview: cellforrowatindexpath« Может быть, я что-то забыл? Я связал ячейку в раскадровке с пользовательской ячейкой и ярлыками. ... NSInteger row = [indexPath row]; NSInteger row = [indexPath row]; NSString * идентификатор; CustomCell * cell = [tableView dequeueReusableCellWithIdentifier: identifier]; if (row == 0) {identifier = @ "ThirdCell"; cell.clubNameLabel.text = @ "% @", [название клуба objectAtIndex: строка]; } return cell; .... –