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 弹出窗口失败,单元格属性始终为零