Swift: 如何实现自定义 AutoSegue
Swift: How to implement a custom AutoSegue
在我的 iPhone 项目中,我有一个退出到 PlayView 的展开转场。
如下所示,在 unwind 函数内部,我有一个计时器,它会延迟 0.05 秒,然后执行 "autoSegue" 函数,该函数会转至其他屏幕。这在 iOS 8 上工作正常,但对于 iOS7 设备,我必须显着增加此延迟(最多 1.0 秒),否则,它会给出 "another segue is already in progress" 错误。
有没有办法在任何先前的 segues 完成后自动执行 "autoSegue" 函数?
@IBAction func unwindToPlay (sender: UIStoryboardSegue){
var del = NSTimer.scheduledTimerWithTimeInterval(0.05, target: self, selector: "autoSegue", userInfo: nil, repeats: false)
}
从 viewDiDAppear
调用您的 autoSegue,而不是从您的 unwind segue。这只会在所有动画转换完成后才会被调用。你不需要计时器。但是您可能希望在展开转场中设置某种标志以在展开转场发生后 仅 触发操作。
编辑
由于这似乎对您不起作用,这里有一些代码...
class RedViewController: UIViewController {
var segueDidUnwind: Bool = false
@IBAction func unwindToRed(sender: UIStoryboardSegue) {
println("unwindToRed");
segueDidUnwind = true
}
override func viewDidAppear(animated: Bool) {
println("viewDidAppear");
if (segueDidUnwind) {
self.showVC()
segueDidUnwind = false
}
}
func showVC() {
let vc = UIViewController()
self.presentViewController(vc, animated: true, completion: nil)
}
}
它是 的扩展...我们可以将日志记录扩展到...
actionForUnwindButton
prepareForSegue
unwindToRed
viewDidAppear
如果 viewDidAppear
没有在您的代码中被调用,您的项目必须有其他结构,这在问题中不明显。
在我的 iPhone 项目中,我有一个退出到 PlayView 的展开转场。 如下所示,在 unwind 函数内部,我有一个计时器,它会延迟 0.05 秒,然后执行 "autoSegue" 函数,该函数会转至其他屏幕。这在 iOS 8 上工作正常,但对于 iOS7 设备,我必须显着增加此延迟(最多 1.0 秒),否则,它会给出 "another segue is already in progress" 错误。
有没有办法在任何先前的 segues 完成后自动执行 "autoSegue" 函数?
@IBAction func unwindToPlay (sender: UIStoryboardSegue){
var del = NSTimer.scheduledTimerWithTimeInterval(0.05, target: self, selector: "autoSegue", userInfo: nil, repeats: false)
}
从 viewDiDAppear
调用您的 autoSegue,而不是从您的 unwind segue。这只会在所有动画转换完成后才会被调用。你不需要计时器。但是您可能希望在展开转场中设置某种标志以在展开转场发生后 仅 触发操作。
编辑
由于这似乎对您不起作用,这里有一些代码...
class RedViewController: UIViewController {
var segueDidUnwind: Bool = false
@IBAction func unwindToRed(sender: UIStoryboardSegue) {
println("unwindToRed");
segueDidUnwind = true
}
override func viewDidAppear(animated: Bool) {
println("viewDidAppear");
if (segueDidUnwind) {
self.showVC()
segueDidUnwind = false
}
}
func showVC() {
let vc = UIViewController()
self.presentViewController(vc, animated: true, completion: nil)
}
}
它是
actionForUnwindButton
prepareForSegue
unwindToRed
viewDidAppear
如果 viewDidAppear
没有在您的代码中被调用,您的项目必须有其他结构,这在问题中不明显。