2009-09-16 70 views
1

我想顯示顯示在tableview中的每個單元號的標籤,但是當我點擊一個行(當電池被反白標明)uitableview子視圖:爲什麼這個uilabel不可見?

- (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; 
} 

回答

1

當您更新的textLabel屬性標籤纔可見一個UITableViewCell,它懶洋洋地創建一個UILabel並將其添加到單元格的子視圖。通常,您不會使用textLabel的組合以及將子視圖添加到contentView,但是如果需要確保textLabel視圖未放置在您的contentView子視圖的頂部。

+0

你知道如何確保該爲textLabel觀點並沒有放置在內容查看子視圖的頂部? 原因實際上是我遇到的問題,文本標籤隱藏標籤 – Mathieu 2009-09-16 04:32:02

+0

您可以使用「-tableView:willDisplayCell:forRowAtIndexPath:」在顯示之前重新排列單元格的視圖。 – 2009-09-16 04:47:22

0

首先,我認爲這是針對3.0。 Apple已經改變了在3.0中如何創建UITableViewCells,並且你應該轉向那個。 -initWithFrame:reuseIdentifier:已棄用。

也就是說,一個可能的問題是內置textLabel干擾您添加的標籤,可能重疊。您應該首先看看新的內置樣式是否能直接滿足您的需求。如果沒有,我會建議要麼使用自己的意見,要麼只使用內置視圖,可能會重新排列它們。如果你想重新排列它們,Apple suggests繼承該單元格並重載-layoutSubviews。我也相信-tableView:willDisplayCell:forRowAtIndexPath:是一個很好的地方做最終的細胞佈局沒有子類化。

+0

謝謝你的這個鏈接,我明天會研究 – Mathieu 2009-09-16 05:00:51

4

我有同樣的問題,它通過設置textlabel的文本之前添加自定義標籤作爲子視圖解決。

... 
cell.textLabel.text = @"X"; 
... 
[cell.contentView addSubview:label] 
0

使用自定義UITableViewCell可讓您更好地控制單元的佈局。添加自定義視圖到該單元的內容查看的子類,並覆蓋layoutSubviews設置子視圖的順序:

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    [self.contentView bringSubviewToFront:self.yourCustomView]; 
}