【问题标题】:How to go back in the navigation stack?如何返回导航堆栈?
【发布时间】:2015-09-11 08:30:59
【问题描述】:

我的应用有 7 个后续视图控制器:VC1 - VC7
在我的导航栏中,我有一个带有操作的后退按钮:轻按和长按。当在任何 VC 中长按后退按钮时,应用程序应该转到 VC2 并呈现它,就好像用户从 VC1 转到 VC2 一样,特别是:点击右后退按钮的动作。

这是我的 UILongPressGestureRecognizer 代码:

func longPressAction(gestureRecognizer: UIGestureRecognizer) {

    if (gestureRecognizer.state == UIGestureRecognizerState.Ended) {

        println("Long press ended")

    } else if (gestureRecognizer.state == UIGestureRecognizerState.Began) {

        println("Long press detected")

        let mainStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
        let vc: ViewController2 = mainStoryboard.instantiateViewControllerWithIdentifier("vc2") as! ViewController2
        navigationController?.pushViewController(vc, animated: true)

    }

}

我怎样才能回到导航堆栈中的正确位置?

【问题讨论】:

    标签: ios swift uinavigationcontroller push gesture


    【解决方案1】:

    您可以在导航控制器中设置视图控制器数组:

    let viewControllersArray = [VC1,VC2]
    self.navigationController.setViewControllers(viewControllersArray, animated: true)
    

    编辑

    在你的场景中

    else if (gestureRecognizer.state == UIGestureRecognizerState.Began) {
    
        println("Long press detected")
    
        let mainStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
        let vc1: ViewController1 = mainStoryboard.instantiateViewControllerWithIdentifier("vc1") as! ViewController1
        let vc2: ViewController2 = mainStoryboard.instantiateViewControllerWithIdentifier("vc2") as! ViewController2
        let VCArray = [vc1,vc2]
        self.navigationController.setViewControllers(VCArray, animated: true)
    }
    

    【讨论】:

      【解决方案2】:

      我可以想到两种方法来实现这一点:

      1. 将 VC2 设置为根视图控制器,然后使用 popToRootViewControllerAnimated。如果 VC2 是您经常被调用的主要控制器,它会更清洁 IMO。

      2. 维护一个布尔值以表示 VC2 是否已加载到堆栈中。如果已加载,则使用 popToViewController,如果尚未加载到内存中,则只需 pushViewController 并推送 VC2。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-31
        • 1970-01-01
        • 2022-07-22
        • 1970-01-01
        • 2021-06-01
        • 2011-06-26
        • 2021-02-24
        • 2019-10-08
        相关资源
        最近更新 更多