Если я правильно понял ваш вопрос, вы хотите отклонить ваш SecondViewController
, когда пользователь нажмет на кнопку tapDone
.И после этого после завершения загрузки изображения вы хотите сообщить об успешном завершении.
Но если вы dismiss
нажали одну кнопку, вы не получите никакого предупреждения, потому что ваш SecondViewController
больше не находится в window hierarchy
, и если вы попытаетесь представить предупреждение, вы получите сообщение об ошибке в консоли, например:
Попытка представить, чье представление не находится в иерархии окон!
Чтобы решить эту проблему, вам нужно представить предупреждение от вашего первого контроллера представления, которое появится после того, как вы уволите свой второй контроллер представления, и вы можете достичь его с помощью delegate
.
Рассмотрите приведенный ниже пример:
Прежде всего объявите protocol
вне вашего FirstViewController
:
protocol UplaodSuccessDelegate:class {
func uploadSuccess(message: String)
}
, затем подтвердите ваш делегат того же класса:
class ViewController: FirstViewController, UplaodSuccessDelegate {
, затем вам нужно передать делегатакогда вы представляете SecondViewController
:
let vc = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
vc.delegate = self. //Pass delegate
self.present(vc, animated: true, completion: nil)
и добавляете метод делегата к тому же классу:
func uploadSuccess(message: String) {
let message = "Save in bg worked"
print(message)
let alert = UIAlertController(title: "title", message: message, preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertAction.Style.default, handler: {
(action) in
}))
self.present(alert,animated: true, completion: nil)
}
теперь в вашем SecondViewController
вам нужно добавить
weak var delegate: UplaodSuccessDelegate?
и в вашем методе tapDone
замените код на:
self.dismiss(animated: true) {
if let image = newImage {
submit2Parse(image: image)
}
}
и после завершения загрузки необходимо вызвать метод делегата (после завершения загрузки), например:
self.delegate?.uploadSuccess(message: "your message")
Это вызовет метод делегата с FirstViewController
.