繁体   English   中英

Swift iOS-在ViewWIllAppear中,如何检查在切换选项卡或打开/关闭视图时是否显示或关闭了ImagePicker?

[英]Swift iOS -In ViewWIllAppear How to Check If ImagePicker is Being Presented or Dismissed While Switching Tabs or The View Is Being Pushed On/Off?

我有一个tabBarController,在其中一个标签中是一个名为view2的视图。 在view2中,有一些在viewWillAppear中运行的代码。 我在view2中也有一个UIImagePickerController。

fileprivate var imagePicker = UIImagePickerController()

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        runSomeCode()
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

        if let image = info[UIImagePickerControllerOriginalImage] as? UIImage{
           imageView.image = image
           imagePicker.dismiss(animated: true, completion: nil)
        }
}

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    imagePicker.dismiss(animated: true, completion: nil)
}

我意识到,每次呈现imagePicker然后将其关闭,然后在viewWillAppear runSomeCode()内部运行。 我不希望它继续被打电话。

我最初在下面使用此代码,但我意识到viewWillAppear中的代码仅在view2被按下时才运行。 如果我切换标签并返回,它将无法运行。

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

       if (isMovingToParentViewController) || (isBeingPresented){

           runSomeCode()
       }else{
           //runs when switching tabs but also runs after the imagePicker is dismissed
       }
}

如何检查是否正在显示或关闭imagePicker,以使我的viewWillAppear中的代码无法运行?

即使接受了so链接的答案有效,我仍然发现了一些简单的方法。 有了接受的答案,您必须检查是否已将视图推入并通过使用bool值和TabBarDelegates的选项卡开关显示了该视图。 它可以工作,但是需要很多工作。 我主要关心的是在显示或关闭imagePicker时代码未运行。

在viewWillAppear中使用此imagePicker测试时, runSomeCode()仅在按下视图时运行,并且有一个选项卡从另一个选项卡切换回该视图,但在imagePicker被呈现或关闭时不会运行:

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

       if imagePicker.isBeingDismissed == false{

           runSomeCode()
       }
}

这就是您将如何在viewWillDisappear中获得相同的效果。 runSomeCode()仅在弹出视图时运行,并且有一个选项卡从该视图切换到另一个选项卡,但在imagePicker显示或关闭时它将不运行:

override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

       if imagePicker.isBeingPresented == false{

           runSomeCode()
       }
}

通过实现UITabBarControllerDelegate解决了类似问题的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM