Прежде всего, убедитесь, что ваша пользовательская ячейка является пользовательским подклассом (подкласс UITableViewCell
) и имеет собственный файл пера (например, не интегрируйте его с вашим контроллером табличного представления).
В наконечнике выберите инспектора идентификации и убедитесь, что класс вашей ячейки равен CustomCell
(или как вы его называли). Также убедитесь, что в инспекторе атрибутов вы установили для Identifier
значение «CustomCellIdentifier» или аналогичное.
В вашем источнике данных табличного представления ваш tableView:cellForRowAtIndexPath
метод должен содержать код, подобный следующему:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CustomCellIdentifier = @"CustomCellIdentifier"; // Same as you set in your nib
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
for (id oneCell in nib) {
if ([oneObject isKindOfClass:[CustomCell class]]) {
cell = (CustomCell *)oneCell;
}
}
}
// Customise the labels etc...
return cell;
}
Это гарантирует, что ваша пользовательская ячейка загружается непосредственно из ее собственного пера, что позволяет вам визуально разметить любые виды или метки. Текст для этих меток может быть затем установлен после того, как соответствующая ячейка была снята с производства / создана.
В вашем коде ваша «обычная» ячейка - это просто UITableViewCell
. Чтобы настроить ячейку с помощью конструктора интерфейса, вам нужно создать свой собственный подкласс этого.
EDIT
Для пользовательской ячейки, которая использует только перо (и , а не пользовательский подкласс), измените приведенный выше пример кода, чтобы привести ячейку к обычному UITableViewCell
, то есть изменить CustomCell
на UITableViewCell
. В Интерфейсном Разработчике присвойте каждому из пользовательских представлений вашей ячейки (метки и т. Д.) Уникальный тег.
При этом код должен выглядеть примерно так:
#define MyLabelTag 10 // These should match the tags
#define MyViewTag 11 // assigned in Interface Builder.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CustomCellIdentifier = @"CustomCellIdentifier"; // Same as you set in your nib
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CustomCellIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
for (id oneCell in nib) {
if ([oneObject isKindOfClass:[UITableViewCell class]]) {
cell = (UITableViewCell *)oneCell;
}
}
}
// Get references to the views / labels from the tags.
UILabel *myLabel = (UILabel *)[cell viewWithTag:MyLabelTag];
UIView *myView = (UIView *)[cell viewWithTag:MyViewTag];
// Customise the views / labels...
// ...
return cell;
}