原因
UITabBarController#selectedIndex= をつかって、プログラムからタブをスイッチすると、delegateのdidSelectViewControllerが呼ばれない。
対策
import UIKit
class MyTabBarController: UITabBarController {
override var selectedIndex: Int {
didSet {
self.delegate?.tabBarController?(self, didSelectViewController: self.viewControllers![selectedIndex])
}
}
override func viewDidLoad() {
self.delegate = self
}
}
extension MyTabBarController: UITabBarControllerDelegate {
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
Log.d(nil, "タブがスイッチされました!")
}
}
こうすることで、プログラムからスイッチする場合も、タブバーのItemをタップからスイッチする場合も、動揺にコールバックを呼ばせることができる
愚痴
なんで読んでくれないのだ。
しかし、iOSのVersionUPで、急に呼ぶようになったら死ぬアプリがかなりありそう。