Если у кого-то еще есть эта проблема, вы можете скачать рабочий пример проекта здесь: https://github.com/ijoshsmith/CustomCellDemo
В противном случае, вот инструкция:
Есть несколько способов сделать это, о которых я знаю.
Принимая следующие имена и структуру файла
-UITableCellCustomClass.h
-UITableCellCustomClass.m
-UITableCellCustomClass.xib
-UITableViewClass.h
-UITableViewCustomClass.m
-UITableViewCustomClass.xib
С помощью Interface Builder для создания настраиваемой ячейки таблицы необходимо сделать следующее:
1.) Создайте пользовательскую ячейку таблицы из NIB (как вы это сделали), которая наследуется от UITableViewCell
2.) Снимите флажок «Владелец файла» в IB для своего пользовательского класса ячейки таблицы и укажите его на классе таблицы, ячейка которого должна отображаться, например, в. измените его на UITableViewCustomClass.
3.) Щелкните ячейку таблицы на экране IB и перейдите в поле с именем UITableViewCell и измените его на наследование от вашего пользовательского класса ячейки таблицы, например. UITableCellCustomClass
4.) Убедитесь, что вы создали все поля и свойства, а также выходы для своих текстовых полей и установили необходимые соединения в построителе интерфейсов между классом ячейки таблицы и ячейкой в пользовательской ячейке xib (примечание: НЕ является владельцем файла). ...)
5.) Я вижу, что у вас там есть переменная "идентификатор ячейки" ... но на всякий случай, если вы еще этого не сделали, убедитесь, что в вашем CustomTableCell xib вы изменили поле идентификатора ячейки в соответствии с вашим пользовательским идентификатором.
Я думаю, что так и должно быть, если память мне не изменяет. Похоже, что вы делаете все остальное правильно со своей таблицей и устанавливаете свойства в ячейке.
Я верю, что это все. Я где-то подробно описал это, потому что это такая боль.
UPDATE:
Если у вас есть пять меток, вам может потребоваться изменить вертикальную высоту строк таблицы, чтобы отображались все метки (если у вас нет действительно широкой таблицы).
Убедитесь, что в таблице указан и делегат, и источник данных, указывающий на родительский класс (тот, в котором размещена логика загрузки ячеек)
Вы должны переопределить эту функцию:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return YOURCUSTOMROWHEIGHT;
}
ОБНОВЛЕНИЕ: Очевидно, вышеприведенного недостаточно, поэтому я попробую еще раз:
Попробуйте сделать это, используя следующий метод UINib:
Добавьте это в свой класс UICustomTableView.h
UINib *cellLoader;
Далее попробуйте следующее (при условии, что вы выполнили все шаги, описанные выше) ... может быть, поможет загрузчик UINib? Я почти уверен, что выполнил все необходимые шаги после просмотра моих записей. Одна вещь, которую нужно попробовать, это создать класс, который расширяет UIViewController, затем удалить из него представление, добавить ячейку таблицы и выполнить шаги, описанные выше, и изменить базовый класс для наследования от UITableCellView.
static NSString *CellClassName = @"YourCellClassName";
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self)
{
cellLoader = [[UINib nibWithNibName:CellClassName bundle:[NSBundle mainBundle]] retain];
}
return self;
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Make sure your identifier is set properly in IB
CustomCellClass *cell = (CustomCellClass *)[tableView dequeueReusableCellWithIdentifier:CellClassName];
if (!cell)
{
NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil];
cell = [topLevelItems objectAtIndex:0];
}
/* set your cell properties here */
return cell;
}