我想实现以下功能:(我正在使用导航控制器)
视图A有几个选项可确定要采用的路径。第一个显示视图B,然后使用导航控制器显示视图C。工具栏的第一个项执行展开以查看a。这是有效的。工具栏中的第二项,我不仅要展开到A,还要重定向到视图E。
视图控制器中的代码如下所示:
@IBAction func unwindToHomeController(segue: UIStoryboardSegue) {
self.performSegue(withIdentifier: "toPerson", sender: self)
}
当我单击工具栏中的第二个项目时,将显示视图E,但在短暂的延迟之后将立即显示视图A。
如何停止视图A的显示?
也许有更好的办法。
最佳答案
您需要等待动画完成才能执行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()
}
}
更新以避免在按下E键时出现闪烁
1)取消展开功能:
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)在情节提要中将segue更新为MyUnwindSegue(确保将模块选择为项目模块而不是空的):
关于ios - iOS Swift导航通过重定向展开,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41404259/