【问题标题】:Custom UITableViewCell Doesn't Draw Corectly自定义 UITableViewCell 无法正确绘制
【发布时间】:2012-08-18 21:04:03
【问题描述】:

我的自定义 UITableViewCell 遇到了一个非常奇怪的问题。我在 Interface Builder 中有一个标识符为“ThreadCell”的单元格,并带有一些自定义标签。这些标签被标记,因此我可以访问它们。

在我的代码中,我正在执行以下操作:

static NSString *CellIdentifier = @"ThreadCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if(cell == nil){
    cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: @"ThreadCell"];
}

Person *person = [self.people objectAtIndex: indexPath.row];
UILabel *nameLabel = (UILabel *)[cell viewWithTag: 0];
nameLabel.text = person.nickname;

return cell;

这似乎工作正常,但有一个例外。 TableView 是这样绘制的:

这显然不是我的自定义单元格。但奇怪的是,当我点击一个单元格时,我得到了这个:

这个是我的自定义单元格,在默认单元格后面绘制。 什么?!我不确定这是怎么发生的,因为我从来没有在任何地方设置文本视图的标题,所以我不确定第一个 John Smith 来自哪里。

有人有什么想法吗?

【问题讨论】:

    标签: objective-c ios interface-builder


    【解决方案1】:

    在您的代码中,您分配了一个普通的UITableViewCell,而不是您的自定义单元格的实例。在initWithStyle 中设置reuseIdentifier 不足以加载自定义单元类的实例。

    如果您为 iOS 5 及更高版本进行开发,则可以使用 registerNib:forCellReuseIdentifier: 注册包含您的自定义单元格的 NIB 文件。 dequeueReusableCellWithIdentifier: 将始终返回该 NIB 的实例。

    【讨论】:

    • 谢谢。我的主故事板中有自定义单元格。我应该把细胞分成自己的笔尖吗?
    • @AndrewM:我认为使用 Storyboard 更容易:将表格视图的原型单元格的“标识符”设置为“ThreadCell”。那么你就不需要registerNib:... 调用了。
    • @AndrewM:会不会是表格视图中有多个原型单元格?
    • 不——该表在 IB 中将 Prototype Cells 设置为 1,而我在实际 IB 画布中只看到一个原型单元格。
    • @AndrewM:奇怪。 - 您选择nameLabel 和[cell viewWithTag: 0]。对于标准单元格,这将返回标准 textLabel。您可以尝试使用不同的标签号,例如17、只是为了缩小问题的范围。 - 我仍然想知道你第二张图片中重叠的单元格。也许您可以在您的问题中添加 Storyboard 设置的屏幕截图?
    猜你喜欢
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多