簡體   English   中英

如何回到導航堆棧?

[英]How to go back in the navigation stack?

我的應用程序有7個后續視圖控制器:VC1 - VC7
在我的導航欄中,我有一個帶有動作的后退按鈕:tapped和longPressed。 當backButton在任何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)

    }

}

如何返回導航堆棧中的正確位置?

您可以在導航控制器中設置視圖控制器陣列:

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

我可以想到兩種方法來實現這個目標:

  1. 將VC2設置為Root視圖Controller,然后使用popToRootViewControllerAnimated 如果VC2是你經常被調用的主要控制器,它的清潔IMO。

  2. 保持一個布爾值來表示VC2是否已加載到堆棧中。 如果加載然后只使用popToViewController ,如果還沒有加載到內存中那么只需pushViewController並推送VC2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM