レア?なケースに直面したので備忘として。
前提条件
- UITableViewDelegateに準拠したクラスを準備
BaseClass
class BaseClass: UITableViewDelegate {
・・・(省略)
}
- BaseClassを継承した子Classを二つ用意
ChildClassA
class ChildClassA: BaseClass {
・・・(省略)
// 例えばこのメソッドを定義
func scrollViewDidScroll(_ scrollView: UIScrollView) { print("A") }
}
ChildClassB
class ChildClassB: BaseClass {
・・・(省略)
// 例えばこのメソッドを定義
func scrollViewDidScroll(_ scrollView: UIScrollView) { print("B") }
}
実行結果(各画面でスクロールさせた時)
結果
A <- なぜか片方しか実行されない
対応
BaseClassで空のDelegateメソッドを実装して、子ClassでOverRideするようにした
BaseClass
class BaseClass: UITableViewDelegate {
・・・(省略)
// 空メソッドを定義
func scrollViewDidScroll(_ scrollView: UIScrollView) {}
}
- BaseClassを継承した子Classを二つ用意
ChildClassA
class ChildClassA: BaseClass {
・・・(省略)
// オーバーライド
override func scrollViewDidScroll(_ scrollView: UIScrollView) { print("A") }
}
ChildClassB
class ChildClassB: BaseClass {
・・・(省略)
// オーバーライド
override func scrollViewDidScroll(_ scrollView: UIScrollView) { print("B") }
}
再実行結果(各画面でスクロールさせた時)
結果
A
B
あまりスマートな解決方法ではないと思いますが、一応やりたいことは出来ました。
かなり簡略化してますが、基本的にはこの構成になっており自分が調査した限りではAとBの違いを見出せず...
UIScrollView周りに知見がおありの方、「ここが怪しいんじゃないの?」的なご意見ございましたら是非ともお願いします(_ _)