[英]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)
}
我可以想到兩種方法來實現這個目標:
將VC2設置為Root視圖Controller,然后使用popToRootViewControllerAnimated
。 如果VC2是你經常被調用的主要控制器,它的清潔IMO。
保持一個布爾值來表示VC2是否已加載到堆棧中。 如果加載然后只使用popToViewController
,如果還沒有加載到內存中那么只需pushViewController
並推送VC2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.