Как использовать UINib для создания и использования пользовательских UITableViewCells
как я могу использовать UINib для создания экземпляра и использования UITableViewCell для представления таблицы в iOS5.0. Я знаю, что существует регистрNib: forCellReuseIdentifier: в iOS5.0, который также должен использоваться, но я не уверен, как его использовать.
Заранее благодарим за помощь на этом
Ответы
Ответ 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