Вы можете загружать пользовательские UITableViewCells из файлов NIB, не создавая сначала подкласс UITableViewCell, но с помощью подкласса вы можете больше настраивать ячейку.
Первое решение без подкласса:
В ViewController:
• Определить ячейку ivar как IBOutlet
UITableViewCell *tableViewCell;
@property (nonatomic, assign) IBOutlet UITableViewCell *tableViewCell;
@synthesize ...
В IB:
• Создайте новый пустой файл NIB и откройте в Интерфейсном Разработчике
• Перетащите ячейку табличного представления из библиотеки в окно документа и откройте ее двойным щелчком
• Настройте ячейку, не забудьтетег добавленных представлений
• Выберите ячейку и добавьте идентификатор (для последующего использования в tableView: cellForRowAtIndexPath:)
• Установите в качестве владельца файла класс контроллера, который будет загружать эту ячейку
• Соединить выход ячейки владельца файла с ячейкой в NIB
В ViewController:
• В tableView: cellForRowAtIndexPath:
static NSString * cellIdentifier = @"SameIdentifierAsInNIB";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: cellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"NibFileNameWithoutSuffix" owner:self options:nil];
cell = tableViewCell;
// Configure the cell
self.tableViewCell = nil;
}
// Configure the cell
все установлено
/ * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
Второе решение, с подклассом:
В редакторе кода:
1.
Создать новый подкласс UITableViewCell
2.
Добавить метод initWithCoder, добавить настройки
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
// init magic here
self.contentView.backgroundColor = [UIColor lightGrayColor];
}
return self;
}
3.
Добавить метод для настройки значений (например, "setupCellWith:")
- (id)setupCellWith:(NSDictionary *)someSetupDict {
// more magic here
}
-> Розетки будутбудет добавлено позже из IB
В IB:
4.
Создать новый пустой файл XIB
5.
Изменить владельца файла = UIViewController
6.
Перетащите ячейку TableView из библиотеки
7.
Измените ее класс на пользовательский подкласс (см. 1.)
8.
Установите свойство идентификатора ячейки // здесь осторожно, так же как в cellForRowAtIndexPath:
9.
Подключить точку просмотра владельца файла к ячейке TableView
10.
Добавить элементы интерфейса, настроить их правильно (установить класс,…)
11.
Создатьнужны utlets через Ctrl-Drag в CustomSubclass.h -> слабый или сильный?-> слабые, сильные только объекты верхнего уровня без предопределенных выходов (например, «представление»)
В редакторе кода:
12.
Customize "tableView: cellForRowAtIndexPath: "
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"CustomIdentifier";
CustomCellSubclass *cell = (CustomCellSubclass *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
//cell = [[CustomCellSubclass alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
UIViewController *tempController = [[UIViewController alloc] initWithNibName:@"CustomCellSubclassXIBName" bundle:nil];
cell = (CustomCellSubclass *)tempController.view;
//[tempController release]; // not needed with ARC
}
// Configure the cell...
[cell setupCellWith:…];
// do other setup magic here
return cell;
}