前提・実現したいこと
現在、TableViewCellに設置したUISWitchを切り替えることでIndexPathを確認することには成功しているのですが、UISwitchを切り替えることにより、cell内のtextを取得したいと考えています。
コンソールに、現在、UISwichを切り替えた際にture,false,indexの情報を出力することには成功しています。これに、cell内のテキストデータも加えたいです。
cell内のテキストを取得して、それを用いて処理の分岐を行いためです。
ですが、tag内にStringを格納できないためにどのようにして対処していいかわからないため、ご助力いただければと思います。
発生している問題・エラーメッセージ
cell内のswitchを変更した際に、どのSwitchなのかをIndexPathではなくてcell内の項目名で取得したいです。
該当のソースコード
TableViewController
1class TableViewController: UITableViewController { 2 3 let names = ["みかん","オレンジ","りんご","なし","バナナ"] 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 } 9 10 override func numberOfSections(in tableView: UITableView) -> Int { 11 return 1 12 } 13 14 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 15 return self.names.count 16 } 17 18 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 19 let cell:TableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TableViewCell 20 let cellData = names[indexPath.row] 21 cell.label.text = cellData.description 22 //タグの値にindexPath.rowを入れる。 23 cell.uiSwitch.tag = indexPath.row 24 //スイッチが押されたときの動作 25 cell.uiSwitch.addTarget(self, action: #selector(fundlSwitch(_:)), for: UIControl.Event.valueChanged) 26 27 return cell 28 } 29 30 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 31 32 let cellData = names[indexPath.row] 33 print("(cellData)") 34 } 35 36 @objc func fundlSwitch(_ sender: UISwitch) { 37 print(sender.tag) 38 print(sender.isOn) 39 } 40}
TableViewCell
1import UIKit 2 3//protocol Delegate: class { 4// func fundlSwitch(name:String) 5//} 6 7class TableViewCell: UITableViewCell { 8 9 @IBOutlet weak var label: UILabel! 10 @IBOutlet weak var uiSwitch: UISwitch! 11 12 }
補足情報(FW/ツールのバージョンなど)
Xcode 10.1
Swift 4.2.1
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/27 05:21
2019/02/27 05:23
2019/02/27 05:29