2010-07-12 35 views
0

我有一個UIControl類Foo被實例化的實例,一個實例對應於UITableView中的每個單元。當圖像被觸摸時,每個foo通過選擇器切換單元左側的圖像(複選標記,無複選標記)。我還分配每個實例標籤:通過其標籤調用類的實例

foo.tag = indexPath.row; 

小區的中心有一個人的名字,這樣,如果在該行的圖像被觸摸時,這個人就是「選擇」。單元右側有一個詳細信息披露按鈕,可以獲取該人的詳細信息。

以上所有的工作正常。

單元格的中心部分現在不做任何事情,但我希望它能像行上的圖像被觸摸一樣做。事實證明,選擇一個人的圖像並不總是顯而易見的。

我的didSelectRowAtIndexPath現在爲空。我的想法是在didSelectRowAtIndexPath中通過其標籤調用與該圖像相對應的選擇器(圖像切換類的實例)。

這是否有意義,如果是這樣做,我會怎麼做?

謝謝。

回答

1

將標籤設置爲在每個單元中相同。

foo.tag = kFooTag; 

在didSelectRow中,獲取單元格,然後從單元格中獲取foo。

-(void) tableView:(UITableView *)table didSelectRowAtIndexPath:(NSIndexPath *)path { 
    UITableViewCell *cell = [table cellForRowAtIndexPath:path]; 
    UIView *foo = [cell viewWithTag:kFooTag]; 
    // do something with foo 
} 

如果您將foo添加到cell.contentView,然後調用viewWithTag。

+0

非常好!完美的作品。謝謝。我只是調用切換方法: [foo toggleImage];就是這樣。我得到一個警告(這是可以理解的):warning:'UIView'可能不會響應'-toggleImage:',但是你知道任何消除它的方法嗎?謝謝。 – 2010-07-12 04:48:14

+0

viewWithTag返回一個'UIView *',但是你可以將它轉換爲任何類型的foo,或者只是使用'id'類型。 – drawnonward 2010-07-12 04:59:15

+0

是的,我的類被稱爲ToggleImageControl,所以: [(ToggleImageControl *)foo toggleImage];消除了警告。 再次感謝。 – 2010-07-12 05:31:05

0

表視圖的DataSource應該包含所有實際的實例 - 爲什麼不直接使用索引和數據源來獲取實例呢?

+0

數據源只有人的名字。在cellForRowAtIndexPath中,我爲每一行實例化一個foo,爲它分配一個標籤和一個選擇器,這樣實例並不真正存儲爲數據源的一部分 – 2010-07-12 03:47:21