Реализация UIImagePickerController и UINavigationControllerDelegate - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь выбрать изображение из галереи, используя UIImagePickerController.

Если мой контроллер просмотра не упоминает UINavigationControllerDelegate.Я получу следующую ошибку при попытке установить UIImagePickerController делегат.

enter image description here

Но только упоминание UINavigationControllerDelegate устранит ошибку времени компиляции.Даже без реализации каких-либо дополнительных функций.

class ViewController: UIViewController ,UITextFieldDelegate 
,UIImagePickerControllerDelegate, UINavigationControllerDelegate

Если бы кто-то мог объяснить мне рациональное за то же самое, это было бы действительно замечательно.

Я использую

Swift 4.2

Xcode 10.1

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Рационально очень просто, если вам нужно отслеживать, когда показывается vc (imagePicker), затем реализовывать UINavigationControllerDelegate методы, чтобы оно имело смысл, иначе это бесполезно, но обязательно

0 голосов
/ 04 марта 2019

screenshot of UIImagePickerController declaration Из документации вы можете видеть, что UIImagePickerController наследует от UINavigationController.

screenshot of delegate declaration Глядя на объявление делегата, этоПонятно, что требуется подтверждение обоих UIImagePickerControllerDelegate & UINavigationControllerDelegate

Почему делегат требует подтверждения обоих протоколов?

UIImagePickerController являетсясистемный интерфейс.Этот класс предназначен для использования как есть и не допускает никаких визуальных изменений.Как вы можете видеть на скриншоте ниже, он поставляется с панелью навигации.

Некоторые из UIImagePickerControllerDelegate методов, таких как imagePickerControllerDidCancel(_:), требуют связи с UINavigationController для получения событий.

Вот почему UIImagePickerController должен подтвердить, что вы подтверждаете UINavigationControllerDelegate.Следовательно, вы видите ошибку.Также обратите внимание, что методы UINavigationControllerDelegate являются необязательными, поэтому вам не нужно их реализовывать, поэтому они просто удаляют ошибку, когда вы упоминаете UINavigationControllerDelegate.

screenshot of UIIMagePickerController

0 голосов
/ 04 марта 2019

Делегат UIImagePickerController определен как

@property(nullable,nonatomic,weak) id <UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate;

Поэтому делегат, который вы хотите установить, должен соответствовать UINavigationControllerDelegate.

UINavigationControllerDelegate не имеет обязательных полей.Таким образом, вам не нужно реализовывать какую-либо функцию или переменную, чтобы соответствовать этому.Следовательно, ваша ошибка устранена.

Screenshot of UINavDelegate

...