0

我有一个小问题,我需要了解这些东西是如何工作的。我在 SO 中进行了搜索,但没有找到任何有效的解决方案。

我的情况如下。

我有一个通过方法UITableViewController加载单元格(在其表中使用)。UINibinstantiateWithOwner:

- (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方法。Fr 示例,在CustomTableViewCell.m 内,我覆盖awakeFromNib如下:

- (void)awakeFromNib
{
    // my internal stuff here
}

awakeFromNib不叫。

你能解释一下我做错了什么吗?

先感谢您。

4

2 回答 2

1

实际上,您需要在“此处显示其他内容”的代码中进行自定义。由于您回收电池,因此您需要确保电池在每次使用时都正确配置。

编辑:我做了一个测试项目,并验证了 awakeFromNib 实际上已发送到班级。这使我相信根本问题是在您的单元格笔尖中,您没有将单元格的类设置为您的 CustomClass 名称。这是唯一可能的解释。

EDIT2:所以重申:

  • 在 CustomTableViewCell.xib 中,对象的类设置为 'CustomTableViewCell'

  • 在 CustomTableViewCell.m 中添加一些日志消息 - 在 initWithCoder 中:如果你有它,也在 awakeFromNib 中(确保拼写!!!)

  • 当你在这里实例化 'cell = [topLevelItems objectAtIndex:0];' 时,在 NSLog(@"Going to instantiate") 之前添加一个日志,然后是一个日志:

    NSLog(@"Instantiate a %@ cell", NSStringFromClass([cell class]);
    

这里必须有一些东西。您的部署目标是什么?在我的测试中,我使用了 5.1

于 2012-09-20T11:41:49.823 回答
1

我只是在awakeFromNib使用时遇到了同样的问题instantiateWithOwner。但是,我改回使用[[NSBundle mainBundle] loadNibNamed:name owner:self options:nil]它并没有解决问题。

然后,在我的自定义视图实现中添加一个测试选择器,当然,应用程序在无法识别的选择器上崩溃了。

所以经过一番咬牙切齿的拉扯,结果证明这是一个相当基本的错误。

在与自定义视图关联的 Xib 中,我忘记在 Interface Builder 的身份检查器中输入名称。因此,运行时认为我的类是一个实例,UIView而不是MyCustomView. 所以awakeFromNib断点永远不会触发。

底线:如果您在使用带有关联 Xib 的自定义视图类时遇到此问题,请检查您是否正确设置了类名:

在此处输入图像描述

于 2013-10-09T10:57:40.060 回答