Warum wird die Fotobibliothek nicht angezeigt, wenn ich sie schnell auswähle?

Dec 09 2020

Mit dieser Frage bitte ich den Benutzer zu entscheiden, ob er die Kamera verwenden oder ein Bild von seinem Telefon auswählen möchte:

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

Was ich viewDidLoadals solches beschwöre :

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

Wenn ich dies jedoch teste, wird die Warnung angezeigt und ich wähle die Fotobibliothek aus, aber die Bibliothek wird nicht angezeigt. Ich habe es versucht, viewDidAppearaber das hat auch nicht funktioniert. Es werden keine Fehler angezeigt. Es wird lediglich die Warnung ausgeblendet und der aktuelle Ansichts-Controller angezeigt.

Antworten

1 matt Dec 09 2020 at 00:00

Sie können sich vorstellen, dass der Code zum Stillstand kommt, wenn eine Warnung angezeigt wird. Aber das tut es nicht! Und Sie können nicht zwei dargestellte Ansichts-Controller gleichzeitig anzeigen. Aber genau das versuchen Sie zu tun.

Sie sagen showAlert(), jetzt ist Ihre Warnung aktiv, und dann sagen Sie sofort present(imagePicker), was Sie nicht tun können, weil Ihre Warnung noch aktiv ist.

Verwenden Sie die Aktionshandler der showAlertWarnung, um die Bildauswahl anzuzeigen. Auf diese Weise wird die Warnung geschlossen und die Bildauswahl geöffnet.