【发布时间】:2012-03-19 14:31:20
【问题描述】:
我有一个带有自定义 UITableViewCells 的表格视图,表格中的每一行都有一个 UILabel、UISwitch 和详细信息披露指示器。
我正在寻找为开关捕获 UIControlEventChanged 的最佳方法,但我还需要更改为更新核心数据的开关的 NSIndexPath。
我也不希望 UISwitch 作为附件类型。
我已经在谷歌上搜索了几个小时,不断弹出的解决方案是使用
[switch addTarget:self action:@selector(switchTapped:) forControlEvents:UIControlEventChanged];
然后在 switchTapped: 方法中使用以下方法获取 NSIndexPath
NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)[[sender superview] superview]];
有没有更好的方法来做到这一点?我已经有 UITableViewCell 的子类,我可以在这个类中放置一个方法来返回给定开关的 NSIndexPath 吗?
提前感谢您的帮助
【问题讨论】:
-
但是,如果视图层次结构在任何时候发生变化,例如 iOS 更新,这将失败。
-
好点子,你可以找到第一个类型为
UITableViewCell的超级视图。那很可能会失败。 -
也许我不完全理解您的问题...您的自定义 UITableViewCell 中有一个 UISwitch ,并且 UITableViewCell 处理正在更改的开关。这就是你说的吗?然后你不能创建一个协议并将你的 tableViewController 设置为那个单元格的代表吗?你能发布额外的代码来说明你的问题吗?
-
@NickBull 我使用上面的代码让它工作。在 cellForRowAtIndexPath: 我有 [switch addTarget:self action:@selector(switchTapped:) forControlEvents:UIControlEventChanged];然后在switchTapped:我有上面的代码 NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)[[sender superview] superview]];获取 UITableViewCell ,它允许我获取该单元格的 NSIndexPath 。但我不喜欢嵌套的 superview 方法来查找 UITableViewCell 并且寻求更好的方法
-
那么所有这些都属于同一类吗?这就是我要说的。从你所说的来看,你似乎把太多的知识放在了一节课上。你需要把它分开。然后,您可以更轻松地访问信息,而不必依赖于浏览视图层次结构,这只是自找麻烦。
标签: iphone objective-c ipad ios5 nsindexpath