UIAlertAction处理程序在延迟之后运行

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

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

但是,处理程序不会运行,直到动作被点击后一秒左右。 有什么办法可以加速吗?

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

正如T先生留下的意见所暗示的,处理程序可能不在主线程中被调用,这可以解释延迟。 尝试embedded您的处理程序代码:

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

看看你是否还有延迟

这里有一个半解决scheme:

UIAlertAction的处理程序有点太迟了 – 我怎么能立即做到这一点?

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

这个解决scheme的问题在于,如果使用UIAlertAction添加操作,则不能像每个button一样运行处理程序。 所以这是一个主要的限制。

然而,这个解决scheme为我工作(因为我试图在警报出现后添加一个背景视图,当警报消失时使警报动起来…原本我试图用button水龙头,但由于处理程序被延迟,这不起作用)。