我有一点问题,我需要了解其中的工作原理。我在SO内搜索过,但没有找到任何有效的解决方案。
我的情况如下。
我有UITableViewController
通过UINib
方法instantiateWithOwner:
加载单元格(在其表格中使用)。
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellClassName];
if (!cell) {
NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil];
cell = [topLevelItems objectAtIndex:0];
}
// other stuff here...
return cell;
}
正确显示单元格。现在,我需要根据不同的标准自定义每个单元格,我认为正确的位置是awakeFromNib
方法。例如,在CustomTableViewCell
。m范围内,我重写awakeFromNib
,如下所示:
- (void)awakeFromNib
{
// my internal stuff here
}
但awakeFromNib
未被调用。
你能解释一下我做错了吗?
提前谢谢你。
答案 0 :(得分:1)
我在使用awakeFromNib
时没有调用instantiateWithOwner
时遇到同样的问题。但是,我改回使用[[NSBundle mainBundle] loadNibNamed:name owner:self options:nil]
并且没有解决问题。
然后,将测试选择器添加到我的自定义视图实现中,当然,应用程序在无法识别的选择器上崩溃。
所以在咬了一下牙齿和头发之后,结果证明这是一个非常基本的错误。
在与自定义视图关联的Xib中,我忘记在Interface Builder中的身份检查器中输入名称。因此,运行时认为我的类是UIView
而不是MyCustomView
的实例。所以awakeFromNib
断点从未触发过。
底线:如果您在使用带有关联Xib的自定义视图类时遇到此问题,请检查您是否正确设置了类名: