UIAlertAction处理程序在延迟后运行

时间:2015-09-07 15:18:58

标签: ios objective-c uialertview uialertcontroller uialertaction

我试图将我的UIAlertViews更改为UIAlertControllers。我为它设置了这个动作:

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

但是,处理程序在点击操作后大约一秒钟才会运行。有什么方法可以加快速度吗?

3 个答案:

答案 0 :(得分:3)

警报视图的短暂延迟是正常的(不到一秒钟)。如果这对您不方便,您可以通过编程方式创建一个覆盖屏幕的视图,其中包含标签和按钮,基本上是一个自定义的警报视图。

答案 1 :(得分:1)

这里有一个半解决方案:

The handler of a UIAlertAction is a bit too late - how can I make it immediate?

基本上,将警报控制器子类化并在viewWillDisappear上运行处理程序。您可以将处理程序块存储在警报控制器上。

此解决方案的问题在于,如果使用UIAlertAction添加操作,则无法像每个按钮一样运行处理程序。所以这是一个主要的限制。

然而,这个解决方案对我有用(因为当警报出现时我试图在警报后面添加一个背景视图,并在警报消失时使警报动起来......最初我试图用按钮点击,但由于处理程序被延迟而无效。

答案 2 :(得分:0)

正如T先生留下的评论所暗示的那样,可能没有在主线程上调用处理程序,这可以解释延迟。尝试将处理程序代码嵌入:

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

看看你是否还有延迟。