我有导航控制器中嵌入的几个视图控制器的故事板。 由于故事板后期视图中的导航逻辑,后退按钮(位于左上角,导航栏中)不会返回到第一个视图。我想知道在哪里以及如何更改第二个视图的后退按钮的这种行为。感谢任何想法,例子。
答案 0 :(得分:5)
当然,您可以实现自定义后退按钮。但是还有一种很好的方法可以继续使用默认按钮。
在致电viewWillDisappear
之前,只需检查当前viewController是否仍在super.viewWillDisappear()
的导航堆栈中。如果不是,则按下后退按钮。然后你可以做popToRootViewControllerAnimated
。
override func viewWillDisappear(animated: Bool) {
if (navigationController?.viewControllers)!.contains(self) {
// back button was pressed
self.navigationController?.popToRootViewControllerAnimated(animated)
}
super.viewWillDisappear(animated)
}
答案 1 :(得分:4)
自定义后退按钮似乎是最佳解决方案。你的action方法中的代码在swift中如下所示:
self.navigationController?.popToRootViewControllerAnimated(true)
//如果您不想让它变得动画,只需将true更改为false。
我希望这有帮助(如果你还没有找到答案)。干杯!
答案 2 :(得分:1)
如果你想说:防止后退按钮导航到上一个控制器并移动到第一个视图控制器: 您可以通过创建自定义后退按钮来执行此操作 - 将故事板中的按钮拖到导航栏的左上角,然后将其连接到视图控制器。在自定义后退按钮的选择器中写:
[self.navigationController popToRootViewControllerAnimated:YES]
答案 3 :(得分:0)
假设您有一个视图控制器堆栈,如:VC1>
[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:@"Back" style:(UIBarButtonItemStylePlain) target:self action:@selector(backToVC1)]];
然后,总是在VC2中:
- (void)backToVC1
{
[self.navigationController popToRootViewControllerAnimated:YES];
}