覆盖自定义单元格initWithStyle方法但未调用它

时间:2015-02-11 09:02:15

标签: ios objective-c xcode uitableview

我有一个自定义的UITableViewCell,我想覆盖如下的init方法:

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    self.buttons = [[NSMutableArray alloc] initWithObjects:self.button1, self.button2,self.button3,self.button4, nil];
    self.labels = [[NSMutableArray alloc] initWithObjects:self.label1,self.label2,self.label3,self.label4, nil];
    NSLog(@"init done");
    return self;
}

我需要这种方法将我的按钮和标签放在数组中。我正在使用以下代码创建单元格:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    FriendViewCell *cell = (FriendViewCell *)[tableView dequeueReusableCellWithIdentifier:@"friendCell" forIndexPath:indexPath];

}

但是没有调用init方法,并且数组是nil。不确定发生了什么!我是否覆盖了正确的方法?

2 个答案:

答案 0 :(得分:2)

只有在显式调用它时才会调用此初始值设定项。如果您从笔尖/故事板加载单元格,则无法调用它。

通常,我们覆盖awakeFromNib方法来自定义从笔尖加载的单元格。

- (void)awakeFromNib {
    [super awakeFromNib];

    self.buttons = [[NSMutableArray alloc] initWithObjects:self.button1, self.button2, self.button3, self.button4, nil];
    self.labels = [[NSMutableArray alloc] initWithObjects:self.label1, self.label2, self.label3, self.label4, nil];
}

另一个注意事项 - 您可以使用buttons,例如

,而不是从button1button2等创建IBOutletCollection数组。
@property (nonatomic) IBOutletCollection NSArray *buttons;

并直接从Interface Builder连接按钮,但请注意,它不会按任何特定顺序保留对象。

答案 1 :(得分:-2)

您可以尝试使用- (id)initWithCoder:(NSCoder *)aDecoder

另外请确保您没有忘记在Interface Builder中设置单元格的自定义类(我假设您已经定义了#34; IB中的自定义单元格)。