Dlaczego biblioteka zdjęć nie jest wyświetlana, gdy wybieram ją w trybie Swift?

Dec 09 2020

Korzystając z tego pytania proszę użytkownika, aby zdecydował, czy chce skorzystać z aparatu, czy wybrać obraz z telefonu:

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

Które w ten sposób wzywam viewDidLoad:

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

Jednak kiedy to testuję, pojawia się alert i wybieram bibliotekę zdjęć, ale biblioteka się nie pojawia. Próbowałem użyć, viewDidAppearale to również nie zadziałało. Nie pojawiają się żadne błędy, po prostu ukrywa alert i pokazuje aktualny kontroler widoku.

Odpowiedzi

1 matt Dec 09 2020 at 00:00

Możesz sobie wyobrazić, że kod zatrzymuje się, gdy pojawia się alert. Ale tak nie jest! Nie można jednocześnie wyświetlać dwóch kontrolerów widoku prezentowanego. Ale to właśnie próbujesz zrobić.

Mówisz showAlert(), więc teraz twój alert jest włączony, a potem natychmiast present(imagePicker)mówisz, czego nie możesz zrobić, ponieważ twój alert wciąż jest włączony.

Użyj programów obsługi akcji showAlertalertu, aby przedstawić próbnik obrazu. W ten sposób alert zostanie zamknięty, a selektor obrazów zostanie otwarty.