4

我正在UITableViewCell从 nib 加载自定义子类。

我的视图控制器viewDidLoad方法使用registerNib:forCellReuseIdentifier. 我的视图控制器的cellForRowAtIndexPath方法用于dequeueReusableCellWithIdentifier加载单元格,但我从不分配/初始化单元格。

视图控制器:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.tV registerNib:[UINib nibWithNibName:@"VersatileIntTFCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:kTFInt];
    self.tV.delegate=self;
    self.tV.dataSource=self;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Int TextField";
    VersatileIntTFCell *cell = (VersatileIntTFCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];   
    return cell;

}

表格视图看起来很好,单元格看起来很好。

现在,我开始编写UITableViewCell. 我的每个子类都有一些@property iVars(它们不是IBOutlets)。我想init在子类的方法中初始化这些UITableViewCell,但这似乎永远不会被调用。我可以在 viewController 中初始化它们,cellForRowAtIndexPath但我想避免这种情况。我想在UITableViewCell子类中做到这一点。这可能吗?如果是这样,如何/在哪里/何时?

4

3 回答 3

10

覆盖该awakeFromNib方法并将您的代码放在那里而不是 init 中。

从文档:

nib 加载基础架构向从 nib 存档重新创建的每个对象发送 awakeFromNib 消息,但前提是存档中的所有对象都已加载和初始化。当一个对象收到一个 awakeFromNib 消息时,它保证已经建立了它的所有出口和动作连接。您必须调用 awakeFromNib 的超级实现,以使父类有机会执行它们需要的任何其他初始化。

于 2013-01-28T21:57:58.803 回答
3

如果要在从 nib 加载任何 UIView 后对其进行初始化,则应覆盖initWithCoder. awakeFromNib也可能有用。请参阅 UIView 参考中的“覆盖方法”。

于 2012-09-26T15:02:48.073 回答