我有一个 UITableView 作为 UIViewController 中的子视图。我没有使用 UITableViewController 因为我有一些与 tableview 无关的其他内容占据了屏幕的一部分。我正在使用故事板。我将表视图设置为出口,视图控制器作为数据源和委托。如果我在这种情况下使用标准 UITableViewCell,则一切正常并且我可以加载内容。
我需要为此表视图使用自定义 UITableViewCell,因此我执行了以下步骤:
- 创建了一个名为 SWTableViewCell 的 UITableView 子类
- 在 viewDidLoad 中添加了一个调用,以向界面生成器注册单元:
[self.tableView registerClass:[SWTableViewCell class] forCellReuseIdentifier:@"Cell"];
- 在我的表格视图的情节提要中,将原型单元的类设置为 SWTableViewCell
- 在情节提要中,将单元重用标识符设置为“Cell”
- 在故事板上的原型单元中添加了一些标签
- 仍在故事板中,按住 Ctrl 键从标签拖动到 SWTableViewCell.h 以创建出口
- In my
cellForRowAtIndexPath:
方法,使单元出队并将其强制转换为自定义子类:SWTableViewCell *cell = (SWTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell"];
当我检查时,单元格变量是正确的类型。它不是 UITableViewCell,而是 SWTableViewCell。但所有出口均无人居住。这些属性存在,但为零。我确信我一定缺少某种联系,但我现在想不出我跳过的任何内容。
这种情况是否可能,或者只是无法通过 IB 和情节提要来实现?
删除呼叫
[self.tableView registerClass:[SWTableViewCell class] forCellReuseIdentifier:@"Cell"];
解决了这个问题。
我不知道这个方法到底是做什么的,因为我从未使用过它,所以我会研究一下。如果有人知道是否需要此电话,请告诉我们!
Edit :
所以,背后的想法registerClass:forCellReuseIdentifier:
是它告诉 tableView 如何创建新单元格。这样一来,如果dequeueReusableCellWithIdentifier:
不返回单元格(如果队列为空),tableView知道如何创建一个新单元格,并且您不需要手动创建一个单元格)。
Edit 2 :
I found this https://stackoverflow.com/questions/19304528/ios-7-dequeuereusablecellwithidentifierforindexpath-method-does-it-need-regis线程,其中写道:
如果单元是使用情节提要中的原型创建的,则无需注册该类。
只需致电dequeueReusableCellWithReuseIdentifier:
将“激活”tableView 的单元格重用功能。
So registerClass:forCellReuseIdentifier:
仅当您手动构建单元而不使用故事板时才会调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)