2017-07-24 2 views
1

J'ai un tabBarController et dans l'un des onglets est une vue appelée view2. Dans view2, du code s'exécute dans viewWillAppear. J'ai aussi un UIImagePickerController dans view2.Swift iOS -In ViewWIllAppear Comment vérifier si ImagePicker est présenté ou rejeté pendant la permutation d'onglets ou si la vue est activée/désactivée?

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

Je me rends compte que chaque fois que le imagePicker est rejeté ensuite présenté puis à l'intérieur viewWillAppear runSomeCode() fonctionne. Je ne veux pas que ça continue d'être appelé. J'ai d'abord utilisé ce code ci-dessous mais j'ai réalisé que le code dans viewWillAppear ne s'exécute que si le view2 est activé. Si je change d'onglet et reviens, il ne fonctionnera pas.

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

Comment puis-je vérifier si le imagePicker est présenté ou rejeté pour que mon code viewWillAppear ne fonctionne pas?

+1

Vérifiez cette réponse à une question similaire. https://stackoverflow.com/a/31686885/50255 –

+0

@ChrisAllwein Merci :) Pourquoi ne pas vous référer à ce lien comme la réponse acceptée afin que je puisse vous mettre à jour! C'est exactement ce que je cherchais –

Répondre

1

This answer à une question similaire a été résolu en mettant en œuvre UITabBarControllerDelegate.

+0

merci, c'est pourquoi j'adore le débordement de la pile :) –

0

Même si la réponse acceptée avec le lien fonctionne, j'ai trouvé quelque chose de plus facile. Avec la réponse acceptée, vous devez vérifier si la vue est activée et si elle est affichée par un commutateur de tabulation en utilisant une valeur booléenne et les TabBarDelegates. Cela fonctionne mais c'est beaucoup de travail. Ma principale préoccupation était le code ne fonctionnait pas pendant que l'imagePicker était présenté ou rejeté.

Avec ce test imagePicker dans viewWillAppear runSomeCode() ne fonctionne que si la vue est poussé sur et s'il y a un onglet Revient à ce point de vue d'un autre onglet, mais il ne fonctionnera pas si le imagePicker est présenté ou rejeté:

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

     if imagePicker.isBeingDismissed == false{ 

      runSomeCode() 
     } 
} 

Et voici comment vous obtiendrez le même effet dans viewWillDisappear. runSomeCode() ne fonctionne que si la vue est sauté hors et s'il y a un interrupteur onglet de ce point de vue à un autre onglet, mais il ne fonctionnera pas si le imagePicker est présenté ou rejeté ::

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

     if imagePicker.isBeingPresented == false{ 

      runSomeCode() 
     } 
}