我试图将我的UIAlertViews更改为UIAlertControllers。我为它设置了这个动作:
UIAlertAction *undoStopAction = [UIAlertAction actionWithTitle:@"Undo Stop"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[self undoStop];
}];
但是,处理程序在点击操作后大约一秒钟才会运行。有什么方法可以加快速度吗?
答案 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>
}
看看你是否还有延迟。