已解决:见问题底部。
我正在为我以编程方式定义的 UITableView 使用自定义 UITableViewCell。自定义 UITableViewCell 当前具有红色背景,仅此而已。这是 UIViewController 的 cellForRowAtIndexPath 的片段:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CCTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CELL_ID];
if (cell == nil)
{
cell = [self getNewCell];
}
…
return cell;
}
- (CCTableViewCell *) getNewCell
{
return [CCTableViewCell newCell];
}
CCTableViewCell中的相关代码:
在.h中:
#define CELL_ID @"CCTVCell"
在他们中:
+ (CCTableViewCell *) newCell
{
CCTableViewCell * cell = [[CCTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CELL_ID];
return cell;
}
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
[self initCell];
}
return self;
}
- (CCTableViewCell *) init
{
self = [super init];
if (self) {
[self initCell];
}
return self;
}
- (void) initCell
{
[self setBackgroundColor:[UIColor redColor]];
}
问题是表格中未使用自定义 UITableViewCell(未显示或未创建)。相反,正在使用标准单元。
我查看了很多其他问题,所有问题都通过我已经实施的步骤解决了。
注意:这里的部分分离是因为这将是特定 UITableViewControllers 的父类,具有自己的 CCTableViewCell 实现。这部分有继承的通用代码。
编辑:添加 CCTableViewCell 代码
编辑++:
这是在我的 UIViewController 的 viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(50, 100, 220, 300)];
tableView.delegate = self;
tableView.dataSource = self;
tableView.allowsMultipleSelection = NO;
[tableView registerClass:[CCTableViewCell class] forCellReuseIdentifier:CELL_ID];
[tableView reloadData];
[self.view addSubview:tableView];
}
EDIT++:TableViewController 是真正的 UIViewController,设置了委托和数据源
编辑:已解决:事实证明,覆盖 willDisplayCell 委托是有效的。有关信息,请参阅下面的链接。
从本质上讲, cellForRowAtIndexPath 似乎只在表创建后做一些事情。只要显示单元格,willDisplayCell 就会工作。我的猜测是该项目在 viewDidLoad 中创建表格时创建了空白单元格。