Почему фото-библиотека не отображается, когда я выбираю ее быстро?

Dec 09 2020

Используя этот вопрос, я прошу пользователя решить, хотят ли они использовать камеру или выбрать изображение со своего телефона:

//Show alert to select the media source type.
    private func showAlert() {

        let alert = UIAlertController(title: "Image Selection", message: "From where you want to pick this image?", preferredStyle: .actionSheet)
        alert.addAction(UIAlertAction(title: "Camera", style: .default, handler: {(action: UIAlertAction) in
            self.imagePicker.sourceType = .camera
        }))
        alert.addAction(UIAlertAction(title: "Photo Album", style: .default, handler: {(action: UIAlertAction) in
            self.imagePicker.sourceType = .photoLibrary
        }))
        alert.addAction(UIAlertAction(title: "Cancel", style: .destructive, handler: nil))
            self.present(alert, animated: true, completion: nil)
    }

Который я призываю viewDidLoadкак таковой:

override func viewDidLoad() {
        super.viewDidLoad()
        firstTextField.delegate = self
        showAlert()
        present(imagePicker, animated: true, completion: nil)
        imagePicker.delegate = self
        firstImageView.layer.cornerRadius = 8
        
    }

Однако, когда я проверяю это, появляется предупреждение, и я выбираю библиотеку фотографий, но библиотека не появляется. Я пробовал использовать, viewDidAppearно это тоже не сработало. Никаких ошибок не появляется, он просто скрывает предупреждение и показывает текущий контроллер представления.

Ответы

1 matt Dec 09 2020 at 00:00

Вы можете представить, что код останавливается, когда появляется предупреждение. Но это не так! И вы не можете показать два представленных контроллера представления одновременно. Но это то, что вы пытаетесь сделать.

Вы говорите showAlert(), так что теперь ваша тревога активна, а затем вы немедленно говорите present(imagePicker), что вы не можете сделать, потому что ваша тревога все еще активна.

Используйте обработчики действий showAlertпредупреждения, чтобы представить средство выбора изображений. Таким образом, предупреждение закроется, и откроется окно выбора изображений.