Можно ли использовать UIImagePickerController непосредственно на доске объявлений? - PullRequest
0 голосов
/ 02 января 2019

У меня сложилось впечатление, что использование ViewController аналогично: на раскадровке мы перетаскиваем UIViewController на сцену, а затем меняем его тип класса, например, в UIImagePickerController. (Я хочу сделать отдельную сцену для выбора изображений)

Но позже я обнаружу, что UIImagePickerController не будет работать, если я непосредственно подкласс:

class TestUIImagePickerController: UIImagePickerController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.sourceType = .photoLibrary
        self.delegate = self
        // self.present(self, animated: true) // either comment it out or not, both way won't work. 
    }

Но это работает, только если я положу UIViewController на раскадровку, а затем создаю UIImagePickerController программно:

class SecondTestUIImagePickerController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()

        let picker = UIImagePickerController()
        picker.sourceType = .photoLibrary
        picker.delegate = self
        self.present(picker, animated: true)
    } 

Могу ли я узнать, пропустил ли я что-нибудь в первом примере использования? И нужно ли создавать UIImagePickerController программно, а затем представлять его через контроллер представления агента (UIVIewController)?

1 Ответ

0 голосов
/ 02 января 2019
self.present(self, animated: true) 

вы не можете self представить self, используйте другой ViewController для представления UIImagePickerController

UIImagePickerController можно использовать на доске рассказов, в вашем коде, например

class SecondTestUIImagePickerController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        let sb = UIStoryboard(name: "ImagePickerStoryboard", bundle: nil)
        let picker = sb.instantiateViewControllerWithIdentifier("ImagePicker") as! TestUIImagePickerController
        self.present(picker, animated: true)
}

имейте в виду, что UIImagePickerController является подклассом UINavigationController

...