是否可以观察presentingViewController中的更改?

时间:2019-09-25 07:46:27

标签: swift uiviewcontroller

Swift中是否有与RACObserve(self, presentingViewController)等效的内容?

或者其他为什么要模仿这种行为?

  • 我的问题是,每当一个视图控制器被另一个视图控制器“隐藏”时,我都希望得到通知。在objc中,我要做的是检查self.presentingViewController是否为nil
  • 请注意,在这种情况下,不知道显示哪个视图控制器,因此不可能从其viewDidAppear / viewDidDisappear内进行通知。

1 个答案:

答案 0 :(得分:-1)

据我所知,您的问题:您需要知道现在显示的视图控制器,并且需要在viewDidAppear/viewDidDisappear中进行通知。

因此,我们可以通过多种方式获得此信息。

简单的方法是:

  1. 获取有关哪个信息现在是顶级ViewController的信息。

2。在您的viewDidAppear/viewDidDisappear中调用此方法 像这样:

获取哪个是顶级ViewController

func getTopViewController() -> UIViewController? {

        if var topVC = UIApplication.shared.keyWindow?.rootViewController {

            while let presentedViewController = topVC.presentedViewController {
                topVC = presentedViewController
                return topVC
            }
            return topVC
        }

        return nil
    }

调用viewDidAppear:

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(true)
        if let top = getTopViewController() {
            print("topView Controller name \(top.title)")
            top.view.backgroundColor = .red
        }
    }

希望它会对您有所帮助!