uitableview子视图:为什么这个uilabel不可见?

时间:2009-09-16 00:24:14

标签: iphone objective-c uitableview uilabel subview

我想在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;
}

3 个答案:

答案 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是一个不进行子类化的最终单元格布局的好地方。