Большая задержка при представлении UIAlert - PullRequest
0 голосов
/ 06 ноября 2018

У меня проблема с оповещением. Я использую UIAlertController. Когда пользователь нажимает кнопку отправки, необходимо сразу же вывести предупреждение «Пожалуйста, подождите ...», пока приложение выполняет некоторые операции. Предупреждение прекращается после завершения операций. У меня долгая задержка (несколько секунд) до того, как предупреждение будет представлено, даже если предупреждение должно быть представлено еще до того, как я начну выполнять операции. Я попытался отправить асинхронно и попытался использовать замыкания, но ничего не работает. До появления предупреждения осталось несколько секунд. Как сделать так, чтобы оповещение появлялось сразу после нажатия кнопки?

override func viewDidLoad() {

    super.viewDidLoad()

    submitButton.addTarget(self,action:#selector(buttonAction),for:.touchUpInside)

}



@objc func buttonAction(){ 

    waiting()

    doOperations()

}

func waiting(){
    DispatchQueue.main.async{
    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.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
    loadingIndicator.startAnimating()

    alert.view.addSubview(loadingIndicator)

    self.present(alert, animated: false, completion: nil)
    }

}


func doOperations(){
    ...
}

func dismissWaiting{
    ...
    //dismiss alert 
}

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Эй, я решил проблему, просто позвонив doOperations в завершение представления предупреждения. Как это:

self.present(alert, animated: false, completion: {self.doOperations()})

Теперь оповещение появляется сразу после нажатия кнопки и все работает нормально. Спасибо, ребята за все предложения.

0 голосов
/ 06 ноября 2018

Просто отправьте в главный поток предупреждение.

...