1
votes

Implémentation UIImagePickerController et UINavigationControllerDelegate

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 .

entrez la description de l'image ici

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


0 commentaires

3 Réponses :


1
votes

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.

 Capture d'écran de UINavDelegate


0 commentaires

0
votes

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


0 commentaires

3
votes

 capture d'écran de la déclaration UIImagePickerController Dans la documentation , vous pouvez voir que UIImagePickerController hérite de UINavigationController.

 capture d'écran de la déclaration du délégué 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 .

 capture d'écran de UIIMagePickerController


1 commentaires

Merci pour la bonne explication :)