我想实现以下功能:(我正在使用导航控制器)
ios - iOS Swift导航通过重定向展开-LMLPHP
视图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()
    }

}

ios - iOS Swift导航通过重定向展开-LMLPHP
更新以避免在按下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导航通过重定向展开-LMLPHP

关于ios - iOS Swift导航通过重定向展开,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41404259/

10-14 21:57