17

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

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

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

4

3 回答 3

3

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

于 2015-09-07T19:56:53.657 回答
1

这里有一个半解决方案:

UIAlertAction 的处理程序有点太晚了 - 我怎样才能让它立即生效?

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

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

然而,这个解决方案对我有用(因为我试图在警报出现时在警报后面添加一个背景视图,并在警报消失时让它随着警报消失......最初我试图用按钮点击来做到这一点,但这不起作用,因为处理程序被延迟)。

于 2017-07-11T19:25:10.163 回答
0

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

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

看看你是否仍然得到延迟。

于 2015-12-14T17:11:26.920 回答