3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UITabBarControllerDelegateのdidSelectViewControllerが呼ばれない

Posted at

原因

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

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?