Два разных типа ячеек в одном UITableView

#iphone #cocoa-touch #uitableview

#iPhone #cocoa-touch #uitableview

Вопрос:

Всем привет, я очень смущен тем, как использовать два разных типа ячеек в одном UITableView с двумя разделами. Первый раздел должен возвращать большую ячейку с большим количеством текста, другой раздел должен возвращать три ячейки для перехода к другим представлениям. Я попробовал это так:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    //NSUInteger section;
    static NSString *CellIdentifier1 = @"CellIdentifier";
    static NSString *CellIdentifier2 = @"Cell";

    if (indexPath.section == 0) {

        CustomTableCell *cell = (CustomTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
        if (cell == nil)
        {
            [[NSBundle mainBundle] loadNibNamed:@"CustomTableCell" owner:self options:nil];     cell = [self customTableCell];
            [self setCustomTableCell:nil];
        }
        return cell;
    }
    else if (indexPath.section == 1) {

            cTableViewCell *cell = (cTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2];
            if (cell == nil)
            {
                [[NSBundle mainBundle] loadNibNamed:@"cTableViewCell" owner:self options:nil];
                cell = [[cTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier2];
                [self setCustomTableCell:nil];
            }
            // Configure the cell...
            NSUInteger row = [indexPath row];
            cell.textLabel.text = [array objectAtIndex:row];
            return cell;            
        }
    return cell;
}
  

Я установил высоту ячеек в разделах здесь:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger section;
    if (section == 0) {
        return [indexPath row]   80;
    }
    else 
    {
        return [indexPath row]   44;
    }

}
  

Я получаю эту ошибку: «ячейка» не объявлена (сначала используйте эту функцию). 🙁 Я действительно надеюсь, что вы могли бы мне помочь. Заранее спасибо

Ответ №1:

В конце tableView:cellForRowAtIndexPath: сделайте это return nil; вместо return cell; .

Комментарии:

1. Было бы лучше объявить cell вне инструкции if-else, например, UITableViewCell *cell; и удалить оба return cell оператора из инструкции if-else, и только return cell в конце метода. Если tableView:cellForRowAtIndexPath: когда-либо возвращается nil , UIKit выдает исключение.

2. @MattDiPasquale в моем tableview данные перемешиваются при прокрутке, но когда я устанавливаю для функции удаления значение nil, это работает, данные nut являются динамическими, поэтому я не хочу использовать nil, есть ли какой-либо другой способ для этого. Пожалуйста, помогите человеку.