2012-03-19 43 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后可能也帮助你。