2014-10-04 71 views
0

我有一個tableview使用UIButton在自定義的UITableViewCell觸發我的視圖控制器中的IBAction。在IOS7中,我能夠通過執行UITableViewCell *clickedCell = (UITableViewCell *)[[[sender superview] superview]superview]來引用觸發操作的特定單元。從IBAction獲取對UITableViewCell的引用?

這在iOS7中運行良好,但它似乎在iOS8中需要將superview之一移除以返回該單元格,否則返回nil。所以我現在就是這樣做的,而且它工作正常,但我想知道是否有更清晰的方法來實現這一點。我只是不喜歡這個樣子。

UITableViewCell *clickedCell; 

if (SYSTEM_VERSION_LESS_THAN(@"8.0")) { 
    clickedCell = (UITableViewCell *)[[[sender superview] superview]superview]; 
} 
else{ 
    clickedCell = (UITableViewCell *)[[sender superview]superview]; 
} 
+3

更好的方法是搜索按鈕的超級視圖直到找到該單元格。看看我的答案在這裏,http://stackoverflow.com/questions/22949304/get-uitableviewcell-of-uibutton/22950960#22950960 – rdelmar 2014-10-04 22:23:55

+0

奇怪我得到'屬性'superview'找不到類型的對象'__strong id' 'on'superView = sender.superview',這是沒有道理的,因爲它不知道它是什麼類,它怎麼知道它做了什麼和沒有? – 2014-10-05 12:59:34

回答

2

你可以子類的UIButton到myButton的,並添加這樣一個屬性:

@property (nonatomic, weak) UITableViewCell *parentCell; 

然後,當你從小區集中parentCell =自

從那裏建立的UIButton你可以簡單地通過以下方式訪問單元:

MYButton *button = (MYButton *)sender; 
clickedCell = sender.parentCell. 

確保使用弱屬性,創建一個保留週期。

+0

這工作完美。謝謝。 – 2014-10-05 14:06:12