UITableViewCellのaccessoryViewでUISwitchを使用しています。
スイッチは、ターゲット アクションを使用して、選択または選択解除されたときに通信します。
switchV.addTarget(self, action: "onChangeSwitch:", forControlEvents: UIControlEvents.ValueChanged)
問題は、どのスイッチが選択されたかを把握することです。私は3つの方法を知っています。どれもなんだか物足りない。
1.タグを使用できます:
switchV.tag = indexPath.row
しかし、セクションがある場合 (私もそうです)、2 桁のセクション/行形式に解析する必要があるため、これは最悪です。
2.データ モデルを使用して、セルが描画しているデータ項目にスイッチ ビューを保存できます。
dataItem.switch.addTarget(self, action: "onChangeSwitch:", forControlEvents: UIControlEvents.ValueChanged)
cell.accessoryView = dataItem.switch
次に、データ セットをループし、送信者と ID を照合することで、どのスイッチが選択されたかを特定できます。これは多くのループであり、データ モデルにビューを入れたくありません。
3.次に、スイッチの座標を使用して行を見つけるこのメソッドがあります。ステートレス風で、文字列の解析やデータ モデルの混乱はありませんが、座標、rly? 信頼できますか?
tableView.indexPathForRowAtPoint(
sender.convertPoint(CGPointZero, toView: tableView)
)
選択されている UISwitch の indexPath を取得するより良い方法はありますか?