Swift iOS -In ViewWIllAppear如何检查ImagePicker在切换选项卡或视图被打开/关闭时是否呈现或取消?

问题描述:

我有一个tabBarController,其中一个选项卡是一个名为view2的视图。在view2中有一些代码在viewWillAppear中运行。我在view2中也有一个UIImagePickerController。Swift iOS -In ViewWIllAppear如何检查ImagePicker在切换选项卡或视图被打开/关闭时是否呈现或取消?

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中的代码将不能运行?

+1

退房这个答案一个类似的问题。 https://*.com/a/31686885/50255 –

+0

@ChrisAllwein谢谢:)为什么你不把这个链接作为接受的答案,所以我可以更新你!这正是我所寻找的 –

This answer到类似的问题通过实施UITabBarControllerDelegate解决。

+0

谢谢,这就是为什么我爱堆栈溢出:) –

即使接受的答案与这样的链接工作,我发现更容易。通过接受的答案,您必须检查视图是否被推送,并且它是通过使用bool值和TabBarDelegates的选项卡开关显示的。它的工作原理,但它是很多工作。我主要担心的是在imagePicker被呈现或解散时代码没有运行。

随着viewWillAppear中runSomeCode()这个imagePicker测试只运行如果视图被推上是否有标签切换回从另一个选项卡这个观点,但如果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() 
     } 
}