2012-02-03 168 views
0

我已將子類型UITableViewCell顯示爲UIImage和兩個UILabel子視圖。在表視圖的視圖控制器中,在方法cellForRowAtIndexPath:中,我已通過setAccessoryType:UITableViewCellAccessoryDetailDisclosureButton啓用了附件視圖。點擊配件按鈕時更改contentView

單元顯示正確。

當我點擊附件泄露按鈕時,我想用兩個不同的標籤子視圖替換兩個標籤子視圖。我的方法是如下:

  1. 在子類UITableViewCell,裏面layoutSubviews,對於「備用」標籤創建 CGRect S,它們在同一個 場所作爲兩個「原始」標籤位置,並通過隱藏setAlpha:;
  2. 當點擊披露按鈕時,通過調整它們各自的alpha來替換兩個 標籤的集合。

問題是我找不出什麼邏輯layoutSubviews我會用來知道附件按鈕是否被輕敲。我看到在視圖控制器accessoryButtonTappedForRowWithIndexPath:被點擊該按鈕時調用,並從那裏看起來像我會打電話layoutSubviews,但無法弄清楚如何使用該事實來完成我想要做的事情。

我對這一切都錯了嗎?我應該簡單地創建另一個UITableViewCell的子類,而不是隱藏/顯示CGRect

回答

1

當我點擊附件披露按鈕時,我想用兩個不同的UILabel子視圖替換兩個UILabel子視圖。

我會做以下事情。在UITableViewCell子像下面創建一個公共方法:

在這種方法中,你可以設置contentView根據您的喜好。

然後在您的視圖控制器實現

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomCell* cCell = (CustomCell*)[tableView cellForRowAtIndexPath:indexPath]; 
    [cCell changeContentForCell]; 
} 

這是變革的內容一個簡單的例子。在我看來,您不必使用layoutSubviews添加視圖。

changeContentForCell中保留此邏輯,然後致電setNeedsLayout更改佈局。也許你可以有一個跟蹤你的單元狀態的變量:正常狀態或修改狀態。

希望它有幫助。

+0

這太棒了 - 非常感謝! – Nick 2012-02-04 01:59:38

+0

不客氣! – 2012-02-04 09:55:41