2019年11月27日水曜日

UITableViewController の Static Cells でセルが選択できない

概要

よく紹介されているのが Single Selection になっているかですが自分は Single Selection になっていても選択できない状態になっていました
原因は Extension でした

環境

  • macOS 10.15.1
  • Xcode 11.2.1 (11B500)

問題

UITableView のタッチイベントを UIView で取得するために以下のような extension を作成していました

extension UITableView {
    open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.next?.touchesBegan(touches, with: event)
    }
}

これを実装していると UITableViewController がタッチイベントを取得できなくなるため Single Selection をちゃんと設定していたもセルが選択できなくなり didSelectRowAt などが呼ばれなくなります

対策

UITableViewController と UIViewController + UITableView が混在しているプロジェクトで起こるかなと思います
対策としては extension ではなく UITableView のスーパークラスを作成します

import UIKit

class CustomTableView: UITableView {
    open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.next?.touchesBegan(touches, with: event)
    }
}

そして UIViewController + UITableView の UITableView にカスタムクラスとして上記のスーパークラスを設定します

こうすることで UITableViewController 側の UITableView には影響しないためちゃんと didSelectRowAt が呼ばれるようになります

0 件のコメント:

コメントを投稿