我想在tableview的每个单元格中显示一个显示数字的标签,但只有当我点击一行时(当单元格是高位时),标签才会显示
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UILabel *label;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
label = [[UILabel alloc] initWithFrame:CGRectMake(200,10, 15, 15)];
label.tag = 1;
[cell.contentView addSubview:label];
[label release];
}
else {
label = (UILabel *)[cell viewWithTag:1];
}
if (indexPath.row == 0) {
cell.textLabel.text = @"Photos";
label.text = [NSString stringWithFormat:@"%d",1];
}
return cell;
}
答案 0 :(得分:4)
我遇到了同样的问题,通过在将自定义标签添加为子视图之前设置textlabel的文本来解决问题。
...
cell.textLabel.text = @"X";
...
[cell.contentView addSubview:label]
答案 1 :(得分:1)
当您更新textLabel
的{{1}}属性时,它会懒惰地创建UITableViewCell
并将其添加到单元格的子视图中。通常,您不会使用UILabel
和向textLabel
添加子视图的组合,但如果您这样做,则需要确保contentView
视图未放在textLabel
的顶部{1}}子视图。
答案 2 :(得分:0)
首先,我假设这是针对3.0。 Apple已经改变了在3.0中创建UITableViewCells的方式,你应该转向它。 {@ 1}}已被弃用。
尽管如此,一个可能的问题是内置-initWithFrame:reuseIdentifier:
会干扰您添加的标签,可能会重叠。您应首先查看其中一种新的内置样式是否直接满足您的需求。如果不是,我建议您只使用自己的视图或仅使用内置视图,可能会重新排列它们。如果要重新排列它们,Apple suggests将对单元格进行子类化并重载textLabel
。我也相信-layoutSubviews
是一个不进行子类化的最终单元格布局的好地方。