Posted at

UITabBarControllerDelegateのdidSelectViewControllerが呼ばれない

More than 3 years have passed since last update.


原因

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で、急に呼ぶようになったら死ぬアプリがかなりありそう。