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^)\
うじゃうじゃ。