我有一个自定义的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。不确定发生了什么!我是否覆盖了正确的方法?
答案 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
,例如
button1
,button2
等创建IBOutletCollection
数组。
@property (nonatomic) IBOutletCollection NSArray *buttons;
并直接从Interface Builder连接按钮,但请注意,它不会按任何特定顺序保留对象。
答案 1 :(得分:-2)
您可以尝试使用- (id)initWithCoder:(NSCoder *)aDecoder
。
另外请确保您没有忘记在Interface Builder中设置单元格的自定义类(我假设您已经定义了#34; IB中的自定义单元格)。