tabBarController didSelect不被调用

时间:2019-01-17 01:26:45

标签: ios uitabbarcontroller

我遇到问题

tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController)

委托射击。问题出在我尝试使用self.tabBarController?.selectedIndex并以编程方式更改选项卡时。一旦我使用selectedIndex并返回到上一个选项卡并单击tabBarItem,该委托将不再触发。仅当我不使用selectedIndex时,才会触发该委托,但是一旦使用它,即使我点击tabBar项,didSelect委托也不会再次触发。有什么建议么?感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

Tabbar委托仅在用户点击选项卡栏时才响应,而在您的代码以编程方式更改选项卡栏内容时不调用。如果仍然有问题,可以共享一些代码。

答案 1 :(得分:0)

您需要像下面这样以编程方式呼叫代表 例如。我需要选择第四索引处的SettingsTab,我可以使用此代码来实现。在这里,didSelect也以编程方式被调用

if let tabbarC = self.tabBarController{
        tabbarC.selectedIndex = 4
        let setting = tabbarC.viewControllers![4]
        self.tabBarController(tabbarC, didSelect: setting)

}

希望这会有所帮助!

答案 2 :(得分:0)

任何对 UITabBarController 委托 Hero 有问题的人。问题出在 Hero 转换 delegate 上,解决方案是将您的 tabBarController 作为容器放在 ViewController 中。然后在容器上设置Hero,问题解决。

tabBarController.viewControllers = [...]
let container = UIViewController()
container.addChild(tabBarController)
container.view.addSubview(tabBarController.view)
tabBarController.didMove(toParent: container)
tabBarController.view.frame = CGRect(x: 0, y: 0, width: container.view.frame.width, height: container.view.frame.height)
container.modalPresentationStyle = .fullScreen
container.hero.isEnabled = true
container.modalAnimationType = .slide(direction: .left)
rootViewController.present(container, animated: true, completion: nil)