お世話になります。
cellをタップすると、タップされたcellが存在するTableViewを編集対象にするという処理をしているのですが、
tableViewのcellが存在しない余白部分をタップした際に、同じような挙動を得る為に良い方法はないでしょうか?
tableViewのカスタムクラスを作成して、tableViewにタグを付け、touchesBeganをオーバーライドする方向で勧めてみたのですが、
カスタムクラス内からViewControllerのプロパティへのアクセス、メソッドを動かすところで詰まっています。
カスタムクラス内からviewControllerのプロパティ書き換え、メソッドを呼び出すにはどうすればよいでしょうか?
tapRecognizerは他の処理に使用しているので避けたいのですが、tapRecognizerを絡めないと無理でしょうか?
swift
1class CustomTableView: UITableView { 2 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 3 super.touchesBegan(touches, with: event) 4 for touch: UITouch in touches { 5 let tag = touch.view!.tag 6 //let sender = touch.view! 7 switch tag { 8 case 3: 9 let vc = ViewController() 10 // vc = nilなので記述方法が間違っている 11 // 新規にVCを生成してるだけ? 12 print("vc.targetTableView:",vc.targetTableView) 13 vc.targetTableView = true 14 print("vc.targetTableView:",vc.targetTableView) 15 case 4: 16 let vc = ViewController() 17 print("vc.targetTableView:",vc.targetTableView) 18 vc.targetTableView = false 19 print("vc.targetTableView:",vc.targetTableView) 20 default: break 21 } 22 } 23 } 24} 25 26 27
swift
1import UIKit 2 3class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 4 5 @IBOutlet weak var jpWordChainTableView: UITableView! 6 @IBOutlet weak var enWordChainTableView: UITableView! 7 8 var targetTableView: Bool = true 9 10 let jpWordChainItems = ["きつね","ねずみ","みみずく","くま","まんもす"] 11 let enWordChainItems = ["bird","dog","giraffe","elephant","Tiger"] 12 13 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 14 if tableView == jpWordChainTableView { 15 return jpWordChainItems.count 16 } else { 17 return enWordChainItems.count 18 } 19 } 20 21 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 22 if tableView == jpWordChainTableView { 23 let cell = tableView.dequeueReusableCell(withIdentifier: "JpWordChainCell", for: indexPath) 24 cell.textLabel?.text = jpWordChainItems[indexPath.row] 25 return cell 26 } else { 27 let cell = tableView.dequeueReusableCell(withIdentifier: "EnWordChainCell", for: indexPath) 28 cell.textLabel?.text = enWordChainItems[indexPath.row] 29 return cell 30 } 31 } 32 // tableViewへの視覚効果変更 33 func changeTableViewAppearance(active: UITableView, deactive: UITableView) { 34 // セルの選択状態を解除する 35 if let indexPathForSelectedRow = deactive.indexPathForSelectedRow { 36 deactive.deselectRow(at: indexPathForSelectedRow, animated: true) 37 } 38 // セルの透明度を変更する 39 UIView.animate(withDuration: 0.3, delay: 0.0, options: [.curveEaseIn], animations: {deactive.alpha = 0.4}, completion: nil) 40 UIView.animate(withDuration: 0.3, delay: 0.0, options: [.curveEaseIn], animations: {active.alpha = 1.0 }, completion: nil) 41 } 42 43 // cellがタップされた場合にtargetTableViewの値を書き換える 44 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 45 if tableView == jpWordChainTableView { 46 targetTableView = true 47 changeTableViewAppearance(active: jpWordChainTableView, deactive: enWordChainTableView) 48 } else { 49 targetTableView = false 50 changeTableViewAppearance(active: enWordChainTableView, deactive: jpWordChainTableView) 51 } 52 } 53 54 override func viewDidLoad() { 55 super.viewDidLoad() 56 // Do any additional setup after loading the view, typically from a nib. 57 changeTableViewAppearance(active: jpWordChainTableView, deactive: enWordChainTableView) 58 } 59 60 override func didReceiveMemoryWarning() { 61 super.didReceiveMemoryWarning() 62 // Dispose of any resources that can be recreated. 63 } 64}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。