Swift iOS -in ViewWi llAppear 如何检查在切换选项卡或视图被推开/关闭时是否显示或关闭图像选



我有一个tabBarController,其中一个选项卡中有一个名为view2的视图。在 view2 中有一些在 viewWillAppear 中运行的代码。我还有一个UIImagePickerController在view2中。

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)
}

我意识到每次显示图像选择器然后关闭时,然后在视图中运行WillAppear运行SomeCode((。我不希望它一直被召唤。

我最初在下面使用此代码,但我意识到 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
}
}

如何检查图像选取器是被显示还是关闭,以便我在viewWillAppear中的代码不会运行?

尽管带有 so 链接的公认答案有效,但我发现一些更容易的东西。使用接受的答案,您必须检查视图是否被推送,以及它是否由使用布尔值和 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()
}
}

最新更新