Warum wird die Fotobibliothek nicht angezeigt, wenn ich sie schnell auswähle?
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 viewDidLoad
als 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, viewDidAppear
aber das hat auch nicht funktioniert. Es werden keine Fehler angezeigt. Es wird lediglich die Warnung ausgeblendet und der aktuelle Ansichts-Controller angezeigt.
Antworten
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 showAlert
Warnung, um die Bildauswahl anzuzeigen. Auf diese Weise wird die Warnung geschlossen und die Bildauswahl geöffnet.