为啥我的自定义 UITableViewCell 没有显示?

Posted

技术标签:

【中文标题】为啥我的自定义 UITableViewCell 没有显示?【英文标题】:Why is my custom UITableViewCell not showing?为什么我的自定义 UITableViewCell 没有显示? 【发布时间】:2012-03-29 13:46:42 【问题描述】:

我之前完成了自定义 UITableViewCells 没有问题。但我无法弄清楚我当前的项目发生了什么。

这就是我所做的……

    创建 CustomCell.h(继承 UITableViewCell) 创建一个空的XIB并拖入UITableViewCell。将背景设置为黑色。 将 Interface Builder 中 UITableViewCell 的类更改为“CustomCell” 在我的 DetailViewController 中导入 CustomCell.h 修改tableView:cellForRowAtIndexPath:
static NSString *CellIdentifier = @"Cell";

CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) 
    NSLog(@"DO I GET HERE?");
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil];
    cell = [topLevelObjects objectAtIndex:0];

我希望我的表格视图单元格显示为黑色?但他们仍然显示为白色......有什么想法吗?谢谢!

更新:好吧,原来,它正在加载自定义单元格...我添加了一个带有一些白色文本的 UILabel。我看不到它,但是当我突出显示单元格时,我可以看到文本在那里。那么现在问题来了,为什么单元格会忽略我为单元格设置的黑色背景?

【问题讨论】:

你不是也要把 IB 中的所有者改成你的视图控制器吗? 忽略我的回答,我的手机破坏了帖子。 首先猜测是您正在从 xib 加载 UIView,您应该将其设置为 cell.contentView。尝试设置:cell.contentView = (UIView *)[topLevelObjects objectAtIndex:0]; 而不是 cell = [topLevelObjects objectAtIndex:0]; rokjarc: 我用那行赋值给只读属性错误 onnoweb:我不这么认为?我正在查看另一个与此工作相关的示例,但在 XIB 中没有看到任何对文件所有者或任何内容的引用 【参考方案1】:

编辑:至于为什么它不是黑色的 - 我希望有一些东西遮住了你的黑色 - 最有可能的候选者是标签背景是白色且不清晰。

以及第 3 点。

属性检查器(第 4 个选项卡)需要将重用标识符设置为您要重用的标识符(您在问题中使用 @"cell")。我会尝试使用一些更具体的东西——毕竟在某些应用程序中你可能有许多类型的自定义单元格。

我认为您还需要将 topLevelObjects 转换为 (CustomCell*)

if (cell == nil) 
    NSLog(@"DO I GET HERE?");
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil];
    cell = (CustomCell*)[topLevelObjects objectAtIndex:0];

【讨论】:

尝试按照您的建议设置重用标识符并进行转换..但仍然得到白色单元格:( 在 xib 中 - 单元格是第一个/唯一的对象吗?我想不出任何其他可能有问题的地方——您拥有的代码与我一直在使用的代码形式相同。右键单击 xib 中的文件所有者并检查它的视图是否未设置为任何内容 - 它不应该是等。 是的,单元格是第一个也是唯一的。我也完全糊涂了。文件的所有者未设置为任何内容。我使用 UIViewController 而不是 UITableViewController 有什么不同吗?另外,这是 splitviewcontroller 的 detailViewcontroller ......这和它有什么关系吗?我可能在这里抓住稻草 嘿,检查我对问题的最新更新.. 单元格正在加载,它只是忽略了我设置的背景颜色?【参考方案2】:

似乎忽略了我设置的背景颜色,所以我只是添加了一个带有背景颜色的 UIView,这似乎可以工作..

【讨论】:

你可以在willDisplayCell...设置背景色,这是推荐的地方。【参考方案3】:

您必须在表格视图中注册您的自定义单元格

这需要在调用该委托之前发生:

[self.tableView registerClass: [CustomCell class] forCellReuseIdentifier:@"CellIdentifier"];

【讨论】:

以上是关于为啥我的自定义 UITableViewCell 没有显示?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的自定义 UITableViewcell 没有显示?

为啥我的自定义 UITableViewCell 宽度在初始加载时不正确?

为啥我的自定义单元格仅在用户移开手指时突出显示?

为啥在我的自定义 UIView 类中没有调用 init(frame: CGRect)?

如何阻止我的自定义 UITableViewCell backgroundImage 可拉伸?

我的自定义 UITableViewCell 表格单元格显示为项目的空白列表