在我的iPhone项目中,我退出了PlayView。
如下所示,在内部展开功能中,我有一个计时器,该计时器会延迟0.05秒,然后执行“ autoSegue”功能,该功能又会切换到其他屏幕。这在iOS 8上可以正常使用,但对于iOS7设备,我必须大大增加此延迟(最多1.0秒),否则,它会显示“另一个segue已经在进行中”错误。

是否有一种方法可以在完成之前的所有任务后自动执行“ autoSegue”功能?

@IBAction func unwindToPlay (sender: UIStoryboardSegue){
    var del = NSTimer.scheduledTimerWithTimeInterval(0.05, target: self, selector: "autoSegue", userInfo: nil, repeats: false)
}

最佳答案

viewDiDAppear而不是从解散调用中调用autoSegue。只有在所有动画过渡完成后才能调用此函数。您不需要计时器。但是,您可能希望在放卷区中设置某种标记,以便仅在放卷区已发生后才触发操作。

编辑
由于这似乎对您不起作用,因此这里有一些代码...

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)
    }
}


它是this answer的扩展...我们可以将日志记录扩展到...

actionForUnwindButton
prepareForSegue
unwindToRed
viewDidAppear


如果未在代码中调用viewDidAppear,则您的项目必须具有其他结构,该结构在问题中不明显。

关于ios - Swift:如何实现自定义AutoSegue,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28418933/

10-13 05:35