Обработчик UIAlertAction работает после задержки

Я пытаюсь изменить UIAlertViews на UIAlertControllers. Я установил для него это действие:

UIAlertAction *undoStopAction = [UIAlertAction actionWithTitle:@"Undo Stop"
                                                        style:UIAlertActionStyleDefault
                                                       handler:^(UIAlertAction *action) {
                                                           [self undoStop];
                                                       }];

Но обработчик не запускается примерно через секунду после нажатия на действие. Есть ли способ ускорить это?

Ответы

Ответ 1

Короткая задержка является нормальной для Alert View (менее секунды). Если это не удобно для вас, вы можете программно создать представление, которое покрывает экран ярлыком и кнопкой, в основном настраиваемый вид предупреждения.

Ответ 2

Как подразумевается комментарий, оставленный г-ном Т, возможно, что обработчик не вызывается в основном потоке, что может объяснить задержку. Попробуйте внедрить код вашего обработчика в:

dispatch_async(dispatch_get_main_queue()) {
<your code>
}

и посмотрите, все ли вы получаете задержку.

Ответ 3

Здесь есть полу-решение:

Обработчик UIAlertAction немного запоздал - как я могу сделать это немедленно?

В основном, подкласс контроллера предупреждений и запуск обработчика на viewWillDisappear. Вы можете сохранить блок обработчика на контроллере предупреждения.

Проблема с этим решением заключается в том, что вы не можете запускать обработчик на кнопку, как вы можете, если вы добавите действие с помощью UIAlertAction. Так что главное ограничение.

Однако это решение сработало для меня (потому что я пытался добавить фоновое представление позади предупреждения, когда появилось предупреждение и заставило его оживить предупреждение, когда предупреждение исчезло... первоначально я попытался сделать это с помощью нажатие кнопки, но это не сработало из-за задержки обработчика).