Pourquoi la photothèque ne s'affiche-t-elle pas lorsque je la sélectionne dans Swift?

Dec 09 2020

En utilisant cette question, je demande à l'utilisateur de décider s'il souhaite utiliser l'appareil photo ou choisir une image de son téléphone:

//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)
    }

Ce que j'envoque en viewDidLoadtant que tel:

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

Cependant, lorsque je teste cela, l'alerte apparaît et je choisis la bibliothèque de photos, mais la bibliothèque n'apparaît pas. J'ai essayé d'utiliser viewDidAppearmais cela n'a pas fonctionné non plus. Aucune erreur n'apparaît, il masque simplement l'alerte et affiche le contrôleur de vue actuel.

Réponses

1 matt Dec 09 2020 at 00:00

Vous imaginez peut-être que le code s'arrête lorsqu'une alerte apparaît. Mais ce n'est pas le cas! Et vous ne pouvez pas afficher simultanément deux contrôleurs de vue présentés. Mais c'est ce que vous essayez de faire.

Vous dites showAlert(), alors maintenant votre alerte est active, puis vous dites immédiatement present(imagePicker), ce que vous ne pouvez pas faire car votre alerte est toujours active.

Utilisez les gestionnaires d'actions de l' showAlertalerte pour présenter le sélecteur d'images. De cette façon, l'alerte se ferme et le sélecteur d'images s'ouvre.