你需要等待動畫完成performSegue到E:
class ViewController: UIViewController {
@IBAction func unwindToA(segue: UIStoryboardSegue) {
}
@IBAction func unwindToE(segue: UIStoryboardSegue) {
CATransaction.begin()
CATransaction.setCompletionBlock {
self.performSegue(withIdentifier: "E", sender: nil)
}
CATransaction.commit()
}
}
修訂爲了避免閃爍呈現,同時推動é
1)拆下unwindToE功能:
extension ViewController {
@IBAction func unwindToA(segue: UIStoryboardSegue) {
}
// @IBAction func unwindToE(segue: UIStoryboardSegue) {
// CATransaction.begin()
// CATransaction.setCompletionBlock {
// self.performSegue(withIdentifier: "E", sender: nil)
// }
// CATransaction.commit()
// }
}
2)創建自定義賽格瑞:
class MyUnwindSegue: UIStoryboardSegue {
override func perform() {
guard let nav = source.navigationController else { return }
guard let root = nav.viewControllers.first else { return }
let viewControllers = [root, destination]
nav.setViewControllers(viewControllers, animated: true)
}
}
3)更新順着接下去MyUnwindSegue在故事板(確保模塊選擇爲您的項目模塊,而不是空):
首先觀察你是否有6個導航控制器。你應該只需要一個。你認爲每個視圖控制器需要嵌入到自己的導航控制器中嗎?不可能在沒有看到更多代碼的情況下診斷目前出現的問題,但目前直到擺脫那些導航控制器才毫無意義。清理出來,然後解決剩下的問題。其次,它是否需要成爲一個工具欄而不是標籤欄?因爲使用標籤欄控制器將提供自動切換視圖控制器的功能功能。 – Gruntcakes
我刪除了額外的導航控制器...我的壞我不明白你只需要一個。不知道要顯示的代碼。我從其他視圖中引用A中的unwind segue,並顯示展開代碼。由於在顯示A之前短暫顯示View E,因此代碼將運行。我也可以通過它。 – lascoff