概要
よく紹介されているのが 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 件のコメント:
コメントを投稿