Как я вижу, вы используете эти функции как расширение UIViewController
.
Один из способов добиться вашего результата - получить ссылку на оповещение, которое вы используете.
ПРИМЕЧАНИЕ: Если вы используете функцию dismiss
, как вы, вы пытаетесь закрыть viewController, а не предупреждение, поэтому вы получаете этопредупреждение.
Попробуйте изменить функцию расширения следующим образом:
1) loadinHubShow
вернет reference
в alert
func loadinHubShow() -> UIAlertController {
let alert = UIAlertController(title: nil, message: "Please wait...", preferredStyle: .alert)
let loadingIndicator = UIActivityIndicatorView(frame: CGRect(x: 10, y: 5, width: 50, height: 50))
loadingIndicator.hidesWhenStopped = true
loadingIndicator.style = UIActivityIndicatorView.Style.gray
loadingIndicator.startAnimating();
alert.view.addSubview(loadingIndicator)
return alert
//You don't have to present the alert here
//present(alert, animated: true, completion: nil)
}
2) loadinHubDismiss
удалит это alert
:
func loadinHubDismiss(alert: UIAlertController) {
alert.dismiss(animated: false, completion: nil)
}
Чтобы использовать эти функции, давайте предположим, что у вас есть ViewController
:
class ViewController: UIViewController{
var myAlert: UIAlertController = UIAlertController()
override func viewDidLoad(...){
myAlert = self.loadinHubShow()
//now you can present or dismiss the alert wherever you want
//for example:
self.present(myAlert,animated: false, completion: nil)
//when you want dismiss the alert, just call:
self. loadinHubDismiss(alert: myAlert)
}
}
РЕДАКТИРОВАТЬ
, чтобы отклонить alert
, как предложено, попробуйте:
DispatchQueue.main.async{
loadinHubDismiss(alert: myAlert)
}