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

Как использовать UINib для создания и использования пользовательских UITableViewCells

как я могу использовать UINib для создания экземпляра и использования UITableViewCell для представления таблицы в iOS5.0. Я знаю, что существует регистрNib: forCellReuseIdentifier: в iOS5.0, который также должен использоваться, но я не уверен, как его использовать.

Заранее благодарим за помощь на этом

4b9b3361

Ответ 1

  • Создайте свой xib файл с помощью UITableViewCell в качестве объекта верхнего уровня. Это называется Cell.xib
  • Создайте объект UINib на основе этого файла
  • Зарегистрируйте UINib в виде таблицы (обычно в viewDidLoad вашего подкласса контроллера табличного представления).

Шаги 2 и 3 могут быть объединены, поэтому вы должны использовать следующую строку в viewDidLoad:

[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];

Затем, в cellForRowAtIndexPath, если вы хотите, чтобы одна из ячеек из nib, вы деактивируете его:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

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

Ответ 2

@jrturtons ответ правильный, но, к сожалению, в iOS 5 ошибка (в iOS 6) в сочетании с VoiceOver: rdar://11549999. Эта проблема относится к категории UITableView. Просто используйте -fixedDequeueReusableCellWithIdentifier: вместо обычного dequeueReusableCellWithIdentifier:. Конечно, NIB должен быть зарегистрирован с помощью

[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];

до (в -viewDidLoad).

UITableView + Workaround.m:

@implementation UITableView (Workaround)
- (id)fixedDequeueReusableCellWithIdentifier:(NSString *)identifier {
    id cell = [self dequeueReusableCellWithIdentifier:identifier];
    if (!cell) {
        // fix for rdar://11549999 (registerNib… fails on iOS 5 if VoiceOver is enabled)
        cell = [[[NSBundle mainBundle] loadNibNamed:identifier owner:self options:nil] objectAtIndex:0];
    }
    return cell;
}
@end