UITableViewCell initWithCoder从未调用过 - 使用Storyboard

时间:2015-08-20 17:13:31

标签: ios uitableview uistoryboard

我再次与Storyboard合作,我不是最好的。

cellForRowAtIndexPath我有:

   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"browse_cell";
    VJBrowseLargeTableViewCell *cell = (VJBrowseLargeTableViewCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    cell.artistLabel.text = currentVideo.artist;

}

在我的.h我的单元格中:

@interface VJBrowseLargeTableViewCell : UITableViewCell

@property (strong, nonatomic) UIImageView *backgroundImageView;

@property (weak, nonatomic) IBOutlet UILabel *artistLabel;
@property (weak, nonatomic) IBOutlet UILabel *songTitleLabel;

@end

.m表示单元格:

 @implementation VJBrowseLargeTableViewCell

-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self initialize];
    }
    return self;
}

- (void)awakeFromNib {

    [super awakeFromNib];

    [self initialize];
}

- (void)initialize {

    self.selectionStyle = UITableViewCellSelectionStyleNone;
    self.backgroundView = [[UIImageView alloc] initWithFrame:self.bounds];
    self.backgroundView.contentMode = UIViewContentModeScaleAspectFill;

    self.artistLabel.textColor = [UIColor greenColor];
    self.artistLabel.font = [UIFont vojiBoldFontWithSize:20];
    self.artistLabel.lineBreakMode = NSLineBreakByTruncatingTail;
    self.artistLabel.numberOfLines = 1;


    self.songTitleLabel.textColor = [UIColor greenColor];
    self.songTitleLabel.font = [UIFont vojiRegularFontWithSize:16];
    self.songTitleLabel.lineBreakMode = NSLineBreakByTruncatingTail;
    self.songTitleLabel.numberOfLines = 1;
}

对于我的tableView,我已经注册了单元格:

 [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"browse_cell"];

我的自定义单元格中没有任何方法被调用,cellForRowAtIndexPathcell.artistLabel.text = currentVideo.artist;崩溃。好像我的单元格代码没有正确连接到Storyboard单元格。

但是,在Storyboard中,我确实设置了class,并且我已正确设置identifier

3 个答案:

答案 0 :(得分:0)

在这种情况下,我认为您不需要注册该类,但是既然如此,您就是为重用标识符注册[UITableViewCell class]而不是[VJBrowseLargeTableViewCell class]

答案 1 :(得分:0)

您的问题出在:

[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"browse_cell"];

您应该注册正确的班级名称:

[self.tableView registerClass:[VJBrowseLargeTableViewCell class] forCellReuseIdentifier:@"browse_cell"];

答案 2 :(得分:0)

UITableViewCells的指定初始化程序实际上是initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier,而不是initWithCoder: (NSCoder*)aDecoder(请参阅docs)。请尝试覆盖该初始化程序。