3

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 を取得するより良い方法はありますか?

4

2 に答える 2