J'essaie de choisir une image de la galerie en utilisant UIImagePickerController
.
Si mon contrôleur de vue ne mentionne pas UINavigationControllerDelegate
. J'obtiendrai l'erreur suivante en essayant de définir le délégué UIImagePickerController
.
Mais en mentionnant simplement UINavigationControllerDelegate résoudra l'erreur de compilation. Sans même implémenter de fonctions supplémentaires.
Swift 4.2 Xcode 10.1
Si quelqu'un pouvait m'expliquer le rationnel derrière le même, ce serait vraiment appréciable.
J'utilise
class ViewController: UIViewController ,UITextFieldDelegate ,UIImagePickerControllerDelegate, UINavigationControllerDelegate
3 Réponses :
Le délégué de UIImagePickerController est défini comme
@property(nullable,nonatomic,weak) id <UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate;
Le délégué que vous souhaitez définir doit donc être conforme à UINavigationControllerDelegate.
UINavigationControllerDelegate n'a pas de champs obligatoires. Vous n'avez donc pas besoin d'implémenter une fonction ou une variable pour se conformer à cela. Votre erreur est donc résolue.
Le rationnel est très simple si vous avez besoin de surveiller quand le vc (imagePicker) est affiché puis implémentez les méthodes UINavigationControllerDelegate
donc cela aura un sens sinon c'est inutile, mais c'est obligatoire
Dans la documentation , vous pouvez voir que UIImagePickerController hérite de UINavigationController.
En regardant la déclaration des délégués, il est clair que cela vous oblige à confirmer à la fois UIImagePickerControllerDelegate
et UINavigationControllerDelegate
Pourquoi déléguer vous oblige-t-il à confirmer les deux protocoles?
UIImagePickerController
est une interface système. Cette classe est destinée à être utilisée telle quelle et ne permet aucune modification visuelle. Comme vous pouvez le voir sur une capture d'écran ci-dessous, il est livré avec une barre de navigation.
Certaines des méthodes UIImagePickerControllerDelegate
comme imagePickerControllerDidCancel (_ :)
nécessitent de communiquer avec UINavigationController
afin de recevoir des événements.
C'est pourquoi UIImagePickerController
doit vérifier que vous confirmez à UINavigationControllerDelegate
. Par conséquent, vous voyez l'erreur. Notez également que les méthodes UINavigationControllerDelegate
sont facultatives afin que vous n'ayez pas réellement besoin de les implémenter et c'est pourquoi elle supprime simplement l'erreur lorsque vous mentionnez UINavigationControllerDelegate
.
Merci pour la bonne explication :)