我正在从tableView:cellForRow:atIndexPath:
中自定义我的TableViewCells到使用自定义UITableViewCell
子类。这是我如何做到的:
首先,创建空XIB,拖动UITableViewCell
并在其上放置UILabel
。创建了一个类(UITableViewCell
的子类),并在Interface Builder的属性编辑器中将类设置为MyCell
。
然后,在我的TableViewController中,输入以下内容:
- (void)viewDidLoad
{
[super viewDidLoad];
// load custom cell
UINib *cellNIB = [UINib nibWithNibName:@"MyCell" bundle:nil];
if (cellNIB)
{
[self.tableView registerNib:cellNIB forCellReuseIdentifier:@"MyCell"];
} else NSLog(@"failed to load nib");
}
之后,我清除了tableView:cellForRow:atIndexPath:
中的所有自定义代码,只留下了默认行:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"MyCell";
MyCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
return cell;
}
当我运行它时,我希望在每个单元格中看到一堆带有单个标签的单元格(我创建XIB时在中间放置的标签)。但相反,我只看到纯白色的空单元格,并在XIB布局中添加/删除组件无济于事。
我花了一天时间尝试不同的选项,例如在Interface Builder中为自定义单元格XIB设置reuseIdentifier并在tableView:cellForRow:atIndexPath:
中加载视图,但没有人帮助。
答案 0 :(得分:10)
...但事实证明,我唯一遗漏的是在我的Storyboard中为此TableViewController清除原型单元格的reuseIdentifier。似乎Storyboard在viewDidLoad
调用之后初始化其视图/组件,而不是采用我的好自定义单元格,xCode设置真正的单元格视图以重用纯白色单元格,这是新创建的TableViewControllers的标准。 / p>
再次:转到TableView属性并删除之前设置的reuseIdentifier;)
我花了这么多时间来做这件事,所以如果我在这里分享这段经历,我认为这可能会有所帮助。