UITableView 自定义单元格 IBOutlets 为零

Posted

技术标签:

【中文标题】UITableView 自定义单元格 IBOutlets 为零【英文标题】:UITableView custom cell IBOutlets are nil 【发布时间】:2016-08-16 11:28:34 【问题描述】:

我创建了一个类,它是UITableViewCell 的子类,我还为此创建了一个xib 文件。

xib 文件中,我添加了一个UITableViewCell,然后给它一个标识符“ChatCell”,然后在我的班级中,我尝试像这样使用这个自定义单元格:

static NSString *CellIdentifier =  @"ChatCell";
ChatCustomCell *cell = (ChatCustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

在课堂上,我提供了UIlabel 中的IBOutlet 并将其连接到我在xib 中创建的UILabel 之一,但是当单元格被创建时,UILabel 保持nil .

为什么会这样?

【问题讨论】:

你在ViewController中注册了nib文件了吗? 不,我没有,但我相信我不需要 如果您使用故事板创建原型单元,则不需要注册笔尖,否则您应该 我使用的是xib文件 您可以直接在表格视图中将多个单元格设计为原型单元格。不需要额外的笔尖。 【参考方案1】:

您需要先在您的 ViewController 中注册您的自定义 Xib 文件。

来自Apple Docs on registerClass:forCellReuseIdentifier::

调用此方法或 registerClass:forCellReuseIdentifier: 方法 告诉表格视图如何创建新单元格。如果一个细胞 指定的类型当前不在重用队列中,表视图使用 提供的信息以自动创建新的单元格对象。

例如在你的viewDidLoad 中写下这一行,在设置 tableView 委托和数据源之后:

[yourTableView registerNib:[UINib nibWithNibName:@"ChatCustomCell" bundle:nil] forCellReuseIdentifier:@"ChatCell"];

如果不这样做,您的 TableView 将无法加载 Cell Nib 文件,这将导致 Cell 的 IBOutlets 为零。

【讨论】:

谢谢你这个作品我以前也尝试过,但可能在某个地方错了。 @Avinash :使用 [tableView dequeueReusableCellWithIdentifier: forIndexPath: ] 进行单元格重用。这是用于非零返回单元格的新 API。【参考方案2】:

对于您的 xib 单元格,它可能会为您的单元格返回 nil,编写此代码可能会对您有所帮助。

ChatCustomCell *cell = (ChatCustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]

if (cell == nil)

    NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"nibName" owner:self options:nil];
    cell = [nibArray objectAtIndex:0];

【讨论】:

以上是关于UITableView 自定义单元格 IBOutlets 为零的主要内容,如果未能解决你的问题,请参考以下文章

带有自定义单元格的 UITableView 弹出窗口失败,单元格属性始终为零

带有自定义单元格的 UITableView

UITableView 中自定义单元格的 UITapGestureRecognizer

UILabels 和自定义 UITableView 单元格

您可以在自定义单元格中制作 TableView 吗?

带有包含自定义单元格的 UITableView 的 UISearchBar => 空白单元格