我有一堆视图控制器(嵌入式导航控制器),我需要在进入下一个屏幕之前进行一些异步调用.问题是我需要在单击映射到segue的按钮时进行此调用,但由于异步调用尚未返回,因此将生成segue并显示下一个视图控制器.在返回异步调用之前,人们如何做这种事情以防止视图控制器导航发生?
TL; DR您可以@IBAction为UIButton函数内部和内部创建一个异步调用,并使用完成在RunningHandler中手动启动segue dispatch_async(dispatch_get_main_queue()) {}.
要创建手动赛格瑞刚刚Ctrl+ Drag从UIViewController到下一个像下面的图片:
然后你会看到如下图所示选择segue的类型:
选择Show类型后,您可以在左侧的视图层次结构中看到segue,选择它来设置segue的标识符,如下图所示:
您可以segue使用该函数手动启动问题performSegueWithIdentifier,您可以在Web中引用以查找有关如何使用Interface Builder手动创建segue的许多教程.
一旦你创建了segue,就可以在任何你想要的地方调用它,在你的情况下,你将在一个异步调用的completionHandler中调用它,你需要使用dispatch_async(dispatch_get_main_queue()) {}Grand Central Dispatch 的功能放入主线程中.
像这样的代码:
@IBAction func buttonTapped(sender: AnyObject) {
asyncFunction() {
dispatch_async(dispatch_get_main_queue()) {
self.performSegueWithIdentifier("someID", sender: sender)
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,在Swift 3中,语法已更改:
@IBAction func buttonTapped(_ sender: AnyObject) {
asyncFunction() {
DispatchQueue.main.async {
self.performSegueWithIdentifier("someID", sender: sender)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助你.
| 归档时间: |
|
| 查看次数: |
4084 次 |
| 最近记录: |