当前位置: 首页 > 知识库问答 >
问题:

延迟后运行的UIAlertAction处理程序

步博涉
2023-03-14

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

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

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

共有3个答案

屠锦
2023-03-14

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

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

看看你是否还能延迟。

穆铭晨
2023-03-14

这里有一个半解决方案:

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

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

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

但是,此解决方案对我有用(因为我尝试在警报出现时在警报后面添加背景视图,并在警报消失时使其与警报一起动画化...最初,我试图用按钮点击来做到这一点,但由于处理程序被延迟,这不起作用)。

吕嘉荣
2023-03-14

对于警报视图,短延迟是正常的(虽然不到一秒钟)。如果这对您来说不方便,则可以以编程方式创建一个视图,该视图使用标签和按钮覆盖屏幕,基本上是自定义的警报视图。

 类似资料:
  • 我在我的android项目的drawable resource文件夹中有一个动画GIF列表。我需要一个接一个地播放这些gif,等待几秒钟,然后播放下一个gif。但当我运行应用程序时,所有gif加载速度非常快,所以我只能看到最后一个gif。我用Glide玩gifs,这是我的代码

  • 问题内容: 我向用户展示了一个,但我不知道如何编写处理程序。这是我的尝试: 我在Xcode中遇到很多问题。 该文件说 目前,整个块/封盖都让我有些头疼。任何建议都非常感谢。 问题答案: 而不是将自己放在处理程序中,而应放置(提示:UIAlertAction!)。这应该使您的代码看起来像这样 这是在Swift中定义处理程序的正确方法。 正如Brian在下面指出的那样,还有更简单的方法来定义这些处理程

  • 我正在向用户呈现一个< code>UIAlertView,但我不知道如何编写处理程序。这是我的尝试: 我在Xcode中遇到了很多问题。 文档说

  • 如何在Vertx中处理延迟作业列表(实际上是数百个HTTP GET请求,到禁止快速请求主机的有限API)?现在,我正在使用此代码,它被阻止,因为Vertx一次启动所有请求。希望在每个请求之间有5秒的延迟来处理每个请求。

  • 我有一个UITableView,在委托(视图控制器)中,我已经实现了该函数 然后,我测试编辑样式 作为删除的一部分,我请求用户确认,如果他们选择“是”,与该行相关的项目将被删除,如果他们选择“否”,我将重置编辑样式。 我似乎遇到的问题是没有调用任何完成处理程序。我在其他地方使用过这种格式,没有任何问题。 该警报将显示标题、消息以及按钮“取消”和“是”。如果我点击其中任何一个,什么都不会发生。警报被

  • 正在发生的事情: 在第8点。无论处理程序是否取消事件,由于取消检查默认为false,第二个事件已经排队。Guava的EventBus坚持在启动下一个事件之前完成当前的处理程序运行,我确信这有其用处,但这不是我想要的。 尝试黑客: