使用registerNib:forCellReuseIdentifier时,如何初始化UITableViewCell iVars?

Ben*_*ral 4 iphone uitableview

我正在UITableViewCell从笔尖加载自定义子类.

我的视图控制器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;

}
Run Code Online (Sandbox Code Playgroud)

表格视图显示正常,单元格显示正常.

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

小智 10

覆盖awakeFromNib方法并将代码放在那里而不是在init中.

来自文档:

nib加载基础结构将awakeFromNib消息发送到从nib归档重新创建的每个对象,但只有在归档中的所有对象都已加载并初始化之后.当一个对象收到一个awakeFromNib消息时,它保证已经建立了所有的插座和动作连接.您必须调用awakeFromNib的超级实现,以便为父类提供执行所需的任何其他初始化的机会.