【问题标题】:UITabBarController's viewControllers present modal controller issueUITabBarController 的 viewControllers 存在模态控制器问题
【发布时间】:2018-06-08 16:50:30
【问题描述】:

我有一个设置了 4 个 viewControllers 的 UITabBarController。

其中一个控制器有一个按钮,显示另一个控制器(包装在 UINavigationController 上),设置如下:

self.definesPresentationContext = true
navController.modalPresentationStyle = .overCurrentContext
navController.modalTransitionStyle = .crossDissolve
self.present(navController, animated: true)

到目前为止一切正常。

现在,如果我切换到另一个选项卡(在前一个模式打开的情况下),然后再次返回到显示模式的选项卡(屏幕仍然在那里,没关系)。然后,如果我关闭模态(从按钮),模态被关闭但控制器视图已经消失(白色),然后如果我切换到另一个选项卡并再次返回选项卡,视图加载正确。

注意:对于这种情况,我需要overCurrentContext,不想阻塞UITabBarController(使用fullScreen)。也可以尝试使用.currentContextcustom

【问题讨论】:

  • 我相信这是一个众所周知的错误。
  • @matt 实际上正在阅读您的书(我把它当作 coobook :) 并等待您的回答).. 感谢您的评论。有什么想法吗?
  • 如果是同样的错误,我会给出我的解决方法,即防止用户这样做——即用户无法在模式打开时切换到另一个选项卡。见github.com/mattneub/Programming-iOS-Book-Examples/blob/master/…
  • @matt 选择你的答案是正确的,因为提到这是一个已知的错误。在我的情况下,我不能强制 TabBar(由于 UX)切换。作为一种解决方法,我执行了以下操作:当 Tab 切换并且 modalPresentationStyle 为 .overCurrentContext 时关闭呈现的控制器。
  • 这也很好,很明显!同样有效。您可以将其作为替代答案,作为记录。

标签: ios swift uiviewcontroller uimodalpresentationstyle


【解决方案1】:

如果这与我演示的 here 相同的错误,我给出的解决方法是防止用户在此选项卡显示呈现的视图控制器时切换到另一个选项卡:

override func viewDidLoad() {
    super.viewDidLoad()
    self.tabBarController?.delegate = self
}
extension FirstViewController : UITabBarControllerDelegate {
    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
        return self.presentedViewController == nil
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多