iOS UITableViewCell detailTextLabel未显示

时间:2015-01-07 10:31:58

标签: ios objective-c uitableview

我希望每个单元格显示detailTextLabel

使用:

实例化(cellForRowAtIndexPath:)单元格
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

我尝试用以下方式设置样式类型:

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                   reuseIdentifier:@"Cell"] autorelease];
}

(我的xcode在自动释放时给出了ARC警告,所以我也尝试省略它。虽然结果相同)

我有点困惑。显然没有cell == nil,代码的第一部分是徒劳的,但是使用它,单元格永远不会显示detailTextLabel。 (是的,正确设置了cell.detailTextLabel.text

我该如何解决这个问题?

更新:因为我正在使用故事板,所以我可以通过将单元格样式设置为'字幕来实现所需的结果。然而,如何以编程方式进行的这个问题仍然存在

2 个答案:

答案 0 :(得分:0)

以编程方式执行此操作时,更改为以下代码。 (非常感谢mbm29414)

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

答案 1 :(得分:0)

创建表格单元格的现代方法是注册单元格,然后使用索引路径将其出列。问题是,如果您注册UITableViewCell,您将始终获得default类型的单元格。

解决方案是继承UITableViewCell并在其中设置样式。例如:

class SubtitleTableViewCell: UITableViewCell {

  override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
  }

  required init?(coder aDecoder: NSCoder) {
    fatalError()
  }
}

现在,在注册时使用您的子类。

let table = UITableView(frame: .zero, style: .plain)
table.register(DebugTableViewCell.self, forCellReuseIdentifier: identifier)