我在 UITableViewCell 的附件视图中使用了 UISwitch。
选择或取消选择时,开关使用目标动作进行通信:
switchV.addTarget(self, action: "onChangeSwitch:", forControlEvents: UIControlEvents.ValueChanged)
问题在于确定选择了哪个开关。我知道3种方法。不知何故,每个人都不满意。
1.我可以使用标签:
switchV.tag = indexPath.row
但是,如果你有部分(我有),这很糟糕,因为我需要将它解析成两个数字的部分/行格式。
2.我可以使用数据模型并将切换视图存储在单元格正在绘制的数据项上:
dataItem.switch.addTarget(self, action: "onChangeSwitch:", forControlEvents: UIControlEvents.ValueChanged)
cell.accessoryView = dataItem.switch
然后,我可以通过遍历我的数据集并与发件人进行身份匹配来确定选择了哪个开关。这是很多循环,我不想将视图放在我的数据模型中。
3.然后就是使用开关的坐标来查找行的这个方法。无状态,不涉及字符串解析或数据模型混淆,但坐标,rly?我可以相信它吗?
tableView.indexPathForRowAtPoint(
sender.convertPoint(CGPointZero, toView: tableView)
)
有没有更好的方法来获取所选 UISwitch 的 indexPath?