问题
对于初学者来说,写tableView的时候有没有遇到过在这样的问题:TableView的cell的detailTextLabel不显示的问题。
关于这两个属性
detailTextLabel系统的TableView有这个两个属性,一个textLabel,一个detailTextLabel,如下官方文档:
// default is nil. label will be created if necessary.
@property (nonatomic, readonly, strong, nullable) UILabel *textLabel NS_AVAILABLE_IOS(3_0);
// default is nil. label will be created if necessary (and the current style supports a detail label).
@property (nonatomic, readonly, strong, nullable) UILabel *detailTextLabel NS_AVAILABLE_IOS(3_0);
问题总结
文档上说default is nil,意思是使用默认的cell的时候,这两个label是空的?还是说这个cell在不用的时候是nil,用的时候会自己创建,这个比较模棱两可。
如果你要使用系统的cell实现textLabel和detailTextLabel显示的效果的时候,创建cell的时候将cell的类型指定为UITableViewCellStyleDefault,这时候你会发现,textLabel能显示出来,而detailTextLabel是显示不出来的。所以说default is nil?
所以如果要实现这种效果你需要将cell的类型指定为UITableViewCellStyleSubtitle类型。
// Left aligned label on top and left aligned label on bottom with gray text (Used in iPod).
UITableViewCellStyleSubtitle
使用UITableViewCellStyleSubtitle类型的cell就能显示出来detailTextLabel的内容了,但是Used in iPod是什么鬼?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellId = @"AddressSelectedController_cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId];
}
DDSearchPoi *poi = self.dataSource[indexPath.row];
cell.textLabel.text = poi.name;
cell.detailTextLabel.text = poi.address;
return cell;
}