2012-07-07 57 views
1

當我添加一個UIView子類對象到一個UIView - 例如UITableViewCell原型內的一個UISwitch,我通過IBAction將這個開關與一個ViewController連接起來,我怎麼能在這個動作中發現哪個錶行是被調用的UISwitch?從子視圖引用包含UIView?

我附有影像僅僅是明確的 - 在調用UISwitch的時候,我想知道調用UISwitch是在哪一行

xcode

回答

2

我認爲「最乾淨」的方式來做到這一點。是讓交換機將其行爲發送給單元本身。您需要繼承UITableViewCell以實現該操作,並將其自身傳遞給視圖控制器上的一個方法(可能通過爲該單元賦予視圖控制器所關聯的委託)。這是一個相當的盛況;下面有更直接但不太合適的方法。

一種方法是在首先配置表格視圖單元格時(即在tableView:cellForRowAtIndexPath:方法中)在UISwitch上指定tag。像switch.tag = indexPath.row;之後您可以通過詢問其標籤來從交換機中檢索該行。

另一種方法是通過UISwitch的超級查找向上搜索,直到找到UITableViewCell並找到它的行。例如:

UIView *view = switch.superview; 
while (view && ![view isKindOfClass:[UITableViewCell class]]) { 
    view = view.superview; 
} 
// at this point, view is nil or a table view cell; ask the table view for its index path 
if (view) { 
    NSIndexPath *path = [tableView indexPathForCell:cell]; 
} 
+0

太棒了!謝謝!! – 2012-07-07 15:01:53

+0

我剛剛發現第一種方法不適用,因爲細胞的可重用性。 – 2012-07-08 16:36:50

+1

第一種方法應該可以正常工作,只要您在每次從'tableView:cellForRowAtIndexPath:'返回單元格時將標籤分配給開關即可。 – 2012-07-08 18:41:49