2012-03-19 35 views
2

我有一個自定義UITableViewCells的tableview,表中的每一行都有一個UILabel,UISwitch和detail披露指標。爲UISwitch獲取一行的NSIndexPath

我正在尋找捕獲交換機的UIControlEventChanged的最佳方法,但我還需要更改爲更新核心數據的交換機的NSIndexPath。

我不希望UISwitch作爲附件類型。

我一直在google搜索這幾個小時,並且不斷彈出是使用

[switch addTarget:self action:@selector(switchTapped:) forControlEvents:UIControlEventChanged]; 

然後在switchTapped解決方案:方法使用以下方法來獲得NSIndexPath

NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)[[sender superview] superview]]; 

是有更好的方法來做到這一點?我已經有了UITableViewCell子類,我可以在這個類中放置一個方法來爲給定的開關返回NSIndexPath嗎?

預先感謝任何幫助

+0

似乎對我來說很好。 – wbyoung 2012-03-19 14:34:22

+0

但是,如果視圖層次結構在iOS更新等任何位置發生更改,將會失敗。 – 2012-03-19 14:48:46

+0

好點,你可以走上前去找到'UITableViewCell'類型的第一個超級視圖。這很可能會失敗。 – wbyoung 2012-03-19 14:56:20

回答

3

我將帶上另一個機會鏈接到我的答案here - 標籤和視圖層次結構散步很笨重,容易出錯並且不必要,我看到他們在SO答案中的所有地方推薦。您可以使用其框架和表視圖的indexPathForRowAtPoint:方法找到任何控件的索引路徑。

+0

感謝您的回覆,這似乎是一個更好的方法。 – 2012-03-19 16:16:48

0

設置爲表的每一行中的開關正確的代碼是一個可行的解決方案。根據它所在行的索引路徑設置標籤。

這樣可以避免視圖層次結構中可能出現的問題。

This後可能也幫助你。