无法使用 .xib 文件在我的自定义单元格中添加任何内容?

Posted

技术标签:

【中文标题】无法使用 .xib 文件在我的自定义单元格中添加任何内容?【英文标题】:Cannot add any content in my custom cell using a .xib file? 【发布时间】:2014-11-28 20:15:36 【问题描述】:

我无法从自定义单元格的 xib 文件中获取内容,单元格为空,单元格 .xib 文件仅包含 UILabel,那么 Master 类(在 Master-Detail 项目中)中的代码如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
MyCell *cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
//[self configureCell:cell atIndexPath:indexPath];
return cell;

self configureCell 用于 Core Data 的地方,为了测试我的 UILabel,我不想从 Core Data 中获取值,所以我评论了这一行。 故事板中“自定义类”设置为“MyCell”,标识符相同...

我也在 MyCell 课堂上试过这个:

- (void)awakeFromNib 
// Initialization code
self.ibLabel.text = @"allo";

但我的单元格仍然是空的...每个单元格的高度在 .xib 中也与代码中相同...


编辑#1:

这可以注册单元格自定义类:

UINib *cellNib = [UINib nibWithNibName:@"MyCell" bundle:nil];
[self.tableView registerNib:cellNib forCellReuseIdentifier:@"Cell"];

【问题讨论】:

【参考方案1】:

确保在 viewDidLoad 中注册 nib:

    self.tableView.registerNib(UINib(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "Cell")

【讨论】:

是的,谢谢,如果nib和class同名,为什么还要注册呢?现在可以正常使用了,非常感谢 看起来这只是 Apple 要求的接线过程的一部分。很高兴它对你有用。【参考方案2】:

您必须初始化单元格。它可能是第一个单元格,而您之前没有...

如果现有单元格可用,此方法会将现有单元格出列,或者根据您之前注册的类或 nib 文件创建一个新单元格。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    MyCell *cell;
    cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    if (cell == nil)
    
        cell = [[MyCell alloc] init];
        cell.ibLabel.text = @"allo";
    
    return cell;

【讨论】:

谢谢,还是什么都没有...我删除了tableView,添加了一个新的,出口似乎是自动添加的(数据和委托设置为“Master”),我也要求1 row 和 1 section 还是有很多空行,正常吗? “大师”是什么意思?您必须将委托和数据源链接到 tableView 的文件所有者,并且必须将其声明为 UITableViewDelegateUITableViewDataSource 感谢LucaD,现在可以正常使用了,我必须注册笔尖名称,请看下面的答案,非常感谢支持! ;)【参考方案3】:

为什么不在单元格中试试 forRow:

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath    *)indexPath 
  MyCell *cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:@"Cell"  forIndexPath:indexPath];
  cell.ibLabel.text = @"allo";
  return cell;

如果这不起作用,您必须确保“Cell”也是情节提要中的标识符,并且情节提要中的类是 MyCell。

首先,一个愚蠢的问题:你实现了这个方法并且它没有返回 0 吗?

 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 
 return 5; // To test
 

第二: 在情节提要中更改自定义单元格的背景颜色,以确保这是此单元格绘画。

【讨论】:

谢谢,但还是一无所获......该类确实是“MyCell”和标识符“Cell”,Core Data 不再填充单元格,我的单元格类是带有 .xib 的基本类文件...就是这样。 @Paul 更多东西要测试。 非常感谢 Onik IV 的帮助,答案是使用 registerNib,现在单元格显示良好,感谢支持! ;)

以上是关于无法使用 .xib 文件在我的自定义单元格中添加任何内容?的主要内容,如果未能解决你的问题,请参考以下文章

在主视图控制器的自定义单元格中使用来自 UIButton 的 IBAction

自定义表格视图单元格中没有可见视图

在 TableView 的自定义单元格中添加单选按钮并且无法访问外部

如何在表格视图单元格中添加 xib 文件?

为啥我的自定义表格单元格中的标签在单击行之前无法显示

自定义单元格:致命错误:在展开可选值时意外发现 nil