【问题标题】:UINavigationController has to call method when updates view with a new ViewControllerUINavigationController 必须在使用新 ViewController 更新视图时调用方法
【发布时间】:2020-05-10 14:45:16
【问题描述】:

我有一个 UINavigationControllerSubclass。当视图控制器弹出到某个新视图控制器时(navigationController.popViewController、navigationController.popToRootViewController 甚至manually sliding from left to right)

我需要在导航控制器内部调用:

viewController.newTopViewController.updateBackButtonTitle()

实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: ios swift uiviewcontroller uinavigationcontroller


    【解决方案1】:

    一种方法如下:

    class CustomNavigationController: UINavigationController {
    
        override func popToRootViewController(animated: Bool) -> [UIViewController]? {
            shouldUpdateBackButtonTitle()
            return super.popToRootViewController(animated: animated)
        }
    
        override func popViewController(animated: Bool) -> UIViewController? {
            shouldUpdateBackButtonTitle()
            return super.popViewController(animated: animated)
        }
    
        private func shouldUpdateBackButtonTitle() {
            viewController.newTopViewController.updateBackButtonTitle()
        }
    }
    

    【讨论】:

    • 我明白了,但是我需要添加函数 popToViewController 和 self.interactivePopGestureRecognizer.addTarget 并且那里也有这个逻辑。我只是认为这可能是一个更好的解决方案
    • 恐怕没有一种方法可以处理所有情况。但可能值得广泛检查 UINavigationController 文档。
    • 您找到解决问题的方法了吗? @PaulT。
    • 坦率地说我已经不记得我是怎么做到的了,所以我会把你的问题标记为正确
    【解决方案2】:

    当你返回 viewController 时调用这个 viewWillAppear 方法。在该函数中,您可以检查您的 rootviewController 然后您可以调用您的

    updateBackbuttonTitle()

    【讨论】:

    • 不,我有 100 个视图控制器并且没有基本视图控制器,我需要从导航控制器(viewController->function)调用此方法
    【解决方案3】:

    您可以使用 viewWillAppear 方法,轻松更新 UI 控件 super.viewWillAppear(动画)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-25
      • 2018-01-12
      相关资源
      最近更新 更多