Making an asynchronous call prior to a segue to the next view controller (Swift)(在分段之前对下一个视图控制器(SWIFT)进行异步调用)
问题描述
我有许多视图控制器(嵌入式导航控制器),在进入下一个屏幕之前,我需要进行一些异步调用。问题是,我需要在单击映射到段的按钮时进行此调用,但由于异步调用尚未返回,因此进行了段并显示了下一个视图控制器。人们如何做这样的事情来防止在返回异步调用之前发生视图控制器导航?
推荐答案
UIButton
创建@IBAction
,并在函数内部使用dispatch_async(dispatch_get_main_queue()) {}
在完成处理程序中手动调用并启动段。
要手动创建段,只需Ctrl+将从UIViewController
拖动到下一个,如下图所示:
然后您将看到选择如下图所示的段类型:
选择Show
类型后,您可以在左侧的视图层次结构中看到分段。选择它可以设置分段的标识符,如下图所示:
您可以使用函数performSegueWithIdentifier
手动启动segue
来处理您的问题,您可以在Web上参考以找到有关如何使用界面生成器手动创建段的大量教程。
一旦创建了Segue,您就可以在您想要的任何地方调用它,在您的情况下,您将在需要使用Grand Central Dispatch的dispatch_async(dispatch_get_main_queue()) {}
函数放入主线程的异步调用的CompletionHandler内调用它。
类似以下代码:
@IBAction func buttonTapped(sender: AnyObject) {
asyncFunction() {
dispatch_async(dispatch_get_main_queue()) {
self.performSegueWithIdentifier("someID", sender: sender)
}
}
}
编辑: 请注意,在SWIFT 3中,语法已更改:
@IBAction func buttonTapped(_ sender: AnyObject) {
asyncFunction() {
DispatchQueue.main.async {
self.performSegueWithIdentifier("someID", sender: sender)
}
}
}
希望这对您有帮助。
这篇关于在分段之前对下一个视图控制器(SWIFT)进行异步调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!