Я использую UISwitch в accessoryView UITableViewCell.
Коммутатор использует target-action для связи, когда он выбран или не выбран:
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. Еще есть этот метод, который использует координату переключателя для поиска строки. Без сохранения состояния, не требует синтаксического анализа строк или путаницы в модели данных, но координаты, правда? Могу ли я этому доверять?
tableView.indexPathForRowAtPoint(
sender.convertPoint(CGPointZero, toView: tableView)
)
Есть ли лучший способ получить indexPath выбранного UISwitch?