Подтвердить что ты не робот

IOS: как удалить лишние ячейки по умолчанию, не имея ячейки в раскадровке

У меня есть несколько таблиц по умолчанию, например, те, у кого есть заголовок, или значок слева и заголовок справа.

Я не хочу добавлять эти ячейки в раскадровку и назначать им идентификатор, возможно ли это сделать?

он должен быть повторно использован, я знаю, как назначить новые ячейки, не подлежащие повторному использованию

Я попробовал ответы ниже,

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:MyCellIdentifier];

должен быть правильным, но это очень утомительно и легко забыть

UITableViewCell *cell =  [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
   cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}

Выше, может быть, лучше, поскольку он помещает все коды в одном месте, но когда я пытаюсь выполнить dequeueReusableCellWithIdentifier: forIndexPath: (с помощью indexPath) он сработает.

  • почему dequeueReusableCellWithIdentifier: forIndexPath вылетает, а dequeueReusableCellWithIdentifier не работает?
  • Если я не передаю indexPath, ячейка повторно используется
  • если он многоразовый, то зачем использовать dequeueReusableCellWithIdentifier: forIndexPath?
4b9b3361

Ответ 1

Если у вас нет прототипа в вашем раскадровке, вы можете использовать dequeueReusableCellWithIdentifier: api для создания классической ячейки

UITableViewCell *cell =  [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
   cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}

Ответ 2

Вы можете отключить UITableViewCell, не имея ячейки прототипа в своем раскадровке. Вам необходимо зарегистрировать ячейку со своей таблицей для определенного идентификатора (строки). Вы сделали бы это так:

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:MyCellIdentifier];

Вы могли бы сделать это в viewDidLoad, может быть.

Затем вы можете деактивировать ячейку, используя этот идентификатор в вашем методе cellForRowAtIndexPath, как обычно.

Edit:

Где MyCellIdentifier - константа, которую вы определили где-то, конечно.

Ответ 3

Вам нужно попытаться деактивировать ячейку, и если вы получите nil, чем создать ее. В файле xib ячейки укажите его идентификатор.

Задайте идентификатор ячейки в файле nib:

Set cell identifier

Получить многоразовую ячейку или создать новую:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"myCell";
    MyCell *cell = (MyCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        NSArray *t = [[NSBundle mainBundle] loadNibNamed:@"myCellXibFileName" owner:nil options:nil];
        for (id currentObject in t)
        {
            if ([currentObject isKindOfClass:[MyCell class]])
            {
                cell = (MyCell *)currentObject;
                break;
            }
        }
    }
    // Do whatever you want with the cell....
    return cell;
}

Ответ 4

Swift 3.0

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell: UITableViewCell = {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell") else {
        return UITableViewCell(style: .default, reuseIdentifier: "cell")
        }
        return cell
    }()

    cell.textLabel?.text = anyArray[indexPath.row]

    return cell
}

Это хорошо, потому что откройте ячейку.