Por que a biblioteca de fotos não é exibida quando eu a seleciono no swift?
Com esta pergunta, peço ao usuário para decidir se deseja usar a câmera ou escolher uma imagem de seu telefone:
//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)
}
Que eu invoco viewDidLoad
como tal:
override func viewDidLoad() {
super.viewDidLoad()
firstTextField.delegate = self
showAlert()
present(imagePicker, animated: true, completion: nil)
imagePicker.delegate = self
firstImageView.layer.cornerRadius = 8
}
No entanto, quando eu testo isso, o alerta aparece e eu escolho a biblioteca de fotos, mas a biblioteca não aparece. Eu tentei usar, viewDidAppear
mas não funcionou bem. Nenhum erro aparece, ele apenas oculta o alerta e mostra o controlador de visualização atual.
Respostas
Você pode estar imaginando que o código para quando um alerta aparece. Mas isso não acontece! E você não pode mostrar dois controladores de visualização apresentados simultaneamente. Mas é isso que você está tentando fazer.
Você está dizendo showAlert()
, então agora seu alerta está ativo, e então você está dizendo imediatamente present(imagePicker)
, o que você não pode fazer porque seu alerta ainda está ativo.
Use os manipuladores de ação do showAlert
alerta para apresentar o seletor de imagens. Dessa forma, o alerta fecha e o seletor de imagens é aberto.