UILabels没有出现在自定义UITableViewCell类中

时间:2013-12-23 02:07:32

标签: ios uitableview

我有一堆UILabel,我想添加到我的自定义UITableViewCell类。我知道如何使用IBOutlets做到这一点,但我只想知道为什么以编程方式这样做对我来说不起作用。这是我的自定义UITableViewCell类的代码。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        _nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 45)];
        [_nameLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:23.0]];
        [_nameLabel setTextColor:[UIColor blackColor]];
        [self addSubview:_nameLabel];

        _artistLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 50, 91, 21)];
        [_artistLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:15.0]];
        [_artistLabel setTextColor:[UIColor blackColor]];
        _artistLabel.textAlignment = NSTextAlignmentCenter;
        [self addSubview:_artistLabel];    }
    return self;
}

此外,我将附加使用此单元格的UITableView子类的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    SKItemCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    SKItemDoc *item = [self.items objectAtIndex:indexPath.row];

    cell.nameLabel.text = item.data.title;
    cell.artistLabel.text = item.data.artist;

    return cell;
}

3 个答案:

答案 0 :(得分:1)

在自定义单元格init方法中。您需要向self.contentView添加标签。改为

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        _nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 45)];
        [_nameLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:23.0]];
        [_nameLabel setTextColor:[UIColor blackColor]];
        [self.contentView addSubview:_nameLabel];

        _artistLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 50, 91, 21)];
        [_artistLabel setFont:[UIFont fontWithName:@"HelveticaNeue" size:15.0]];
        [_artistLabel setTextColor:[UIColor blackColor]];
        _artistLabel.textAlignment = NSTextAlignmentCenter;
        [self.contentView addSubview:_artistLabel];    }
    return self;
}

答案 1 :(得分:1)

如果你在storyboard或xib中创建了这个单元格,那么你需要覆盖initWithCoder:而不是initWithStyle:reuseIdentifier :(不会被调用)。

答案 2 :(得分:0)

如果单元格尚不存在,则需要创建

E.G:

SKItemCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if(NULL == cell)
{
    cell = [[SKItemCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
}

样式(UITableViewCellStyleDefault或其他)与您只需创建一些可重用单元格的事实无关。

另外,在自定义单元格的.h文件中声明属性:

@property (strong) IBOutlet UILabel * nameLabel;
@property (strong) IBOutlet UILabel *artistLabel; 

并在.m文件中:

@synthesize nameLabel = _nameLabel;
@synthesize artistLabel = _artistLabel;