UITableView registerNib:forCellReuseIdentifier:

Fog*_*ter 42 iphone uitableview

我在WWDC视频中看到过这个,但只是非常简短.他们没有介绍如何创建实际的xib文件.

我有一个名为MyCustomCell的UITableViewCell子类.在这里我有几个属性UILabels,UIImageViews等...都设置为IBOutlets.

现在,在我的xib文件中......

我将什么设置为文件的所有者?我在哪里引用我的MyCustomCell类是文件的所有者?

一旦我设置了文件的所有者,我如何将其与xib的根视图链接?

我尝试了一些设置,但在使用时我一直都会遇到错误.

哦,我用来注册它的代码是......

self.cellNib = [UINib nibWithNibName:@"MyCustomCell" bundle:nil];
[self.tableView registerNib:self.cellNib forCellReuseIdentifier:@"CustomCell"];
Run Code Online (Sandbox Code Playgroud)

谢谢

Ali*_*are 47

通常情况下,你不必理会文件在这种情况下,业主,因为当tableView实例从提供/相关的细胞UINib与一起reuseIdentifier.它会加载所有的笔尖的顶级对象,并且只使用第一个顶级对象是类的UITableViewCell(或者只是第一个顶级对象,无论类的?但一般而言,您只需要您UITableViewCell在无论如何你的XIB - 不计算File's OwnerFirst Responder只是"代理").

实际上,tableView将尝试将单元格出列,如果找不到可重用的单元格,它将使用UINib您提供的单元格创建一个新单元格.它将类似于此:

NSArray* topLevelObjects = [self.cellNib instantiateWithOwner:nil options:0];
cell = [topLevelObjects objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

(这当然是一个简化版本只是为了表明这个想法,我不知道它是否真的称之为这些确切的行,但它应该非常接近)

因此,File's Owner不使用在这种特殊情况下,你只需要把一个简单的自定义UITableViewCell作为唯一的XIB文件的顶级对象旁边现有File's OwnerANF First Responder(即,再一次,只是"代理" /"外部对象引用"并且不会被实例化,也不会成为返回的顶级对象的一部分" instantiateWithOwner:options:.


如果它仍然不起作用:

  • 请确保您填写正确的reuseIdentifier您的UITableViewCell在IB(在Object Inspector面板右侧,一旦你选择了你的IB细胞),并使用完全相同的值,这个reuseIdentifier属性在IB您在代码中使用一个.
  • 如果仍然没有运气,请提供更多信息,尤其是您有什么样的错误,日志消息或例外.

  • 谢谢!我离开了顶视图作为UIView,这就是它无法正常工作的原因.一旦我删除了它并添加了一个UItableViewCell作为顶视图它工作正常.谢谢. (3认同)
  • 我只是想再次发表评论.这真是令人难以置信的有用!我已经从我的故事板中重构了很多UI,并分离了XIB文件,这大大降低了我正在处理的应用程序的复杂性和维护!再次感谢:D (3认同)

Nut*_*tch 11

我发现问题中给出的代码很好,但如果您使用的是故事板,则无法self.tableViewinit方法中引用.在另一个问题上有一些关于它的讨论.

所以第一行是init:

self.cellNib = [UINib nibWithNibName:@"MyCustomCell" bundle:nil];

但这条线应该是viewDidLoad或类似的:

[self.tableView registerNib:self.cellNib forCellReuseIdentifier:@"CustomCell"];

这解决了我的神秘错误,例如 "*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle <Foo.app> (loaded)' with name 'Ogf-Sj-1ej-view-bBf-Ti-Dda''"

而且,是的,我正在做一些非常类似于从Storyboard中挖掘出来的东西,并将它们放在xib中以便在视图控制器中重复使用!