带有 XIB 的自定义 UITableViewCell

Posted

技术标签:

【中文标题】带有 XIB 的自定义 UITableViewCell【英文标题】:Custom UITableViewCell with XIB 【发布时间】:2015-01-16 20:59:49 【问题描述】:

我环顾四周,有很多关于如何做到这一点的示例,但我仍然不明白。

我有一个列表,其中列出了我想要显示标题、创建日期和其他一些内容的日记条目。我想用 XIB 来设计一个单元格,所以 UX 设计师可以修改它并像素推送它。

所以,这就是我设置 xib 的方式:

然后我创建了一个 xib 单元指向的类,并为其添加了两个属性:

@property (atomic, weak) IBOutlet UILabel* titleLabel;
@property (atomic, weak) IBOutlet UILabel* dateLabel;

我希望能够在创建这些单元格时设置这些。

在包含列表的视图中,我这样做: 在 -(void) viewDidLoad

[self.tableView registerNib:[UINib nibWithNibName:@"DreamListTableViewCell" bundle:nil] forCellReuseIdentifier:@"DreamListCell"];

在 - (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 我这样做:

static NSString *MyIdentifier = @"DreamListCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier forIndexPath:indexPath];

问题是,如果我在单元格 xib 中设置 IBOutlets,应用程序会崩溃,因为我猜它的所有者在初始化时真的是 nil,但我实际上并不确定。如果我无法在界面生成器中连接它们,我该如何修改这两个属性?我应该怎么做?

另外,我没有使用故事板。我以此为指导:Chapter 21. Table Views and Collection Views

对于重复的问题,我深表歉意,我只是不明白。哈!

编辑: 出口截图:

编辑#2: 如果我删除单元 xib 中的插座连接,我会看到:

【问题讨论】:

您是否将自定义类绑定到 IB 中的单元格?您还需要在cellForRowAtIndexPath中指定该自定义类而不是UITableViewCell 我稍后将“单元”转换为我的自定义单元类,但在执行该代码之前它崩溃了。我将文件所有者设置为,并将 xib 中的根视图设置为指向我的自定义单元类:( 它到底在哪里崩溃,异常说明了什么? 我的回答来得太晚了,很抱歉@pbasdf @AndrisZalitis 没问题。很高兴 SpaceBear 找到了解决方案。 【参考方案1】:

不要使用 File's Owner 将关系设置为 IBOutlets。更改单元格的类并改用它(在某些 Xcode 版本上建立连接可能很棘手,但可行)。

【讨论】:

以上是关于带有 XIB 的自定义 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 带有 xib 文件的自定义视图,IBOutlet 为 nil

在具有动态高度的 IB uitableviewcell 中使用带有 XIB 的自定义视图

显示来自 Xib 的自定义视图

iOS:Xcode 似乎在 XIB 文件名中插入了一个额外的空格,导致“无法加载 XIB 文件”问题

在 xib 中带有可选 UIImageView 的自定义 UITableViewCell

带有 nib 子视图的自定义 UIVIew 无