【Swift4】UITableViewCellにUISwitchをつけたがindexPath.rowを受け取るのが大変だった件。

UITableViewは便利です。そんなに使いこなせていないけど。
Cellを自由にアレンジしたいけどわざわざクラスを作るんはめんどくさいってことで、
StoryboardでCellに直接乗せていろいろやってたんだけど、UISwitchがうまくかない。
具体的にはスイッチのイベントは受け取れるけどそれが何番目のセルがわからない。

同じ悩みが書いてあるところはいろいろと有った。
参考サイト
【今度こそ】カスタムセルに設置したUISwitchのindexPathを取得する – 技術はメシのタネ
Swift – TableViewのカスタムセルに設置したUISwitchのインデックス番号を取得する方法|teratail
iOS – TableViewに貼り付けたスイッチのインデックスを取得する方法|teratail
しかし、どうにもスマートでない感じ。

最終的に参考にさせてもらったのはこちらのサイト。
CustumTableViewCellとaccessoryViewを使ってTableVIewのレイアウトをカスタマイズ | すいすいSwift

accessoryViewを使うのがポイントでした。

//Cellの中身
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath)
    
    //UISwitchをcellのアクセサリービューに追加する
    let switchView = UISwitch()
    cell.accessoryView = switchView
    
    //スイッチの状態
    switchView.isOn = dic["switch"] as! Bool
    //タグの値にindexPath.rowを入れる。
    switchView.tag = indexPath.row
    //スイッチが押されたときの動作
    switchView.addTarget(self, action: #selector(fundlSwitch(_:)), for: UIControlEvents.valueChanged)
    
    return cell
}
//スイッチのテーブルが変更されたときに呼ばれる
func fundlSwitch(_ sender: UISwitch) {
    print(sender.tag)
    print(sender.isOn)
}

インデックス番号がわからないとスチッチつける意味ないですよね。/(^o^)\
うじゃうじゃ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です