如何返回导航堆栈?
How to go back in the navigation stack?
我的应用程序有 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)
}
}
如何返回导航堆栈中的正确位置?
您可以在导航控制器中设置视图控制器数组:
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 设置为您的根视图控制器,然后使用 popToRootViewControllerAnimated
。如果 VC2 是经常被调用的主控制器,它会更清洁 IMO。
维护一个布尔值来表示 VC2 是否已加载到堆栈中。如果已加载,则只需使用 popToViewController
,如果尚未加载到内存中,则只需 pushViewController
并按下 VC2。
我的应用程序有 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)
}
}
如何返回导航堆栈中的正确位置?
您可以在导航控制器中设置视图控制器数组:
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 设置为您的根视图控制器,然后使用
popToRootViewControllerAnimated
。如果 VC2 是经常被调用的主控制器,它会更清洁 IMO。维护一个布尔值来表示 VC2 是否已加载到堆栈中。如果已加载,则只需使用
popToViewController
,如果尚未加载到内存中,则只需pushViewController
并按下 VC2。