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 没有在您的代码中被调用,您的项目必须有其他结构,这在问题中不明显。