【问题标题】:UITableView custom cell IBOutlets are nilUITableView 自定义单元格 IBOutlets 为零
【发布时间】: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文件
  • 您可以直接在表格视图中将多个单元格设计为原型单元格。不需要额外的笔尖。

标签: ios objective-c uitableview tableviewcell


【解决方案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];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多