В this Быстрый учебник, предоставляемый яблоком, имеет пример, чтобы выбрать изображение из библиотеки фотографий. Код выглядит следующим образом:Зачем использовать UIImagePickerController?
class ViewController: UIImagePickerControllerDelegate, // Question 1
UINavigationControllerDelegate {
...
@IBAction func selectImageFromPhotoLibrary(sender: UITapGestureRecognizer) {
nameTextField.resignFirstResponder()
// Question 2
let imagePickerController = UIImagePickerController()
imagePickerController.sourceType = .PhotoLibrary
imagePickerController.delegate = self
presentViewController(imagePickerController, animated: true, completion: nil)
}
// Question 3
func imagePickerControllerDidCancel(picker: UIImagePickerController) {
dismissViewControllerAnimated(true, completion: nil)
}
}
У меня есть три вопроса по поводу этого кода:
- Когда мне нужно UIImagePickerControllerDelegate но не UINavigationControllerDelegate или наоборот?
- Почему он создает imagePickerController как локальную переменную? Является ли переменная экземпляра класса плохим дизайном в этом случае?
- Я тестировал поведение imagePickerControllerDidCancel по умолчанию, и он отклонил контроллер вида. Затем я посмотрел its document, в котором говорится, что реализация является необязательной, но ожидаемой. Почему это ожидается?
Я протестировал программу, не выполнив DidCancel, и он отклонил выборщик изображений. Вот почему мне интересно. – stk
Я вижу. Я думаю, UIImagePickerController пытается быть приятным, поэтому вам не нужно делать дополнительную работу :) – jtbandes
В первом вопросе, который я задал, когда мне не нужен делегат навигации, если класс соответствует делегату сборщика. Если это всегда необходимо, разве он не делает код уродливым и подверженным ошибкам? – stk