【问题标题】:tabBarController didSelect does not get calledtabBarController didSelect 没有被调用
【发布时间】:2019-06-11 04:04:52
【问题描述】:

我遇到了问题

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

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

【问题讨论】:

  • 所以它看起来像 VC0 点击到 VC1(VC0 委托触发)并且 VC1 使用 selectedindex 0 回到 VC0 但是当我点击 VC0 中的任何内容时,委托不会被触发
  • 已解决-问题是我在另一个 VC 中有 self.tabBarController.delegate = self,这使他们在使用 selectedIndex 后成为委托。我最终做的只是让一个 VC 成为委托,这解决了以编程方式更改 tabBarViews 的问题。

标签: ios uitabbarcontroller


【解决方案1】:

您需要像下面这样以编程方式调用委托 例如。我需要选择位于第 4 个索引的 SettingsTab,我可以使用此代码来实现。这里的didSelect也以编程方式调用

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

}

希望这会有所帮助!

【讨论】:

  • 我试用了这段代码,再次启动委托非常有效。我认为问题在于我在另一个 VC 中有 self.tabBarController.delegate = self,这使他们在使用 selectedIndex 后成为委托。我所做的只是让一个 VC 成为委托,从而解决了以编程方式更改 tabBarViews 的问题。
【解决方案2】:

标签栏委托仅在响应用户点击标签栏时调用,当您的代码以编程方式更改标签栏内容时不会调用。

【讨论】:

  • 感谢您的回复,如果不以编程方式使用 selectedIndex,您将如何更改 tabBars?
  • 您可以通过编程方式更改标签栏 - tabBar Controller.selectedIndex = index
【解决方案3】:

任何对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)

【讨论】:

    猜你喜欢
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 2019-02-07
    • 1970-01-01
    相关资源
    最近更新 更多