即使使用不同的单元格样式,UITableViewCell detailTextLabel也不会显示

时间:2014-06-02 02:42:08

标签: ios objective-c uitableview

这是我的代码:

- (UITableView *)table {
    if (!_table) {
        _table = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
        [_table setDelegate:self];
        [_table setDataSource:self];
        [_table registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
    }
    return _table;
}


- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    if (!cell)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
    else

    [self configureCell:cell forRowAtIndexPath:indexPath];

    return cell;
}

问题是当我registerClass为我的表时,它假设我的单元格样式为UITableViewCellStyleDefault。这就是detailTextLabel没有出现的原因。我测试了它。

评论registerClass行不起作用,因为我CellIdentifier没有任何dequeueReusableCell。所以它会抛出一些例外。

如果我没有使用dequeue,它可行,但这不是最佳做法。

AFAIK,表格单元格在初始化后无法改变其样式。那么如何让detailTextLabel出现?

1 个答案:

答案 0 :(得分:7)

  

问题是当我registerClass为我的表时,它假设我的单元格样式为UITableViewCellStyleDefault。这就是为什么detailTextLabel没有出现

的原因

这是正确的。解决方案是:不要将UITableViewCell注册为您的类。注册一个自定义UITableViewCell子类,其唯一目的是将其自身初始化为不同的样式。

例如,注册您已定义的MyCell类:

@interface MyCell:UITableViewCell
@end
@implementation MyCell
-(id)initWithStyle:(UITableViewCellStyle)style
   reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:UITableViewCellStyleValue2 // or whatever style you want
                reuseIdentifier:reuseIdentifier];
    return self;
}
@end