如何强制返回按钮转到第一个视图控制器(swift)
问题描述:
我有几个视图控制器嵌入在导航控制器的故事板。 由于故事板后面视图中的导航逻辑,后退按钮(位于导航栏左上角)不会返回到第一个视图。我想知道在哪里以及如何更改第二个视图的后退按钮的这种行为。欣赏任何想法,例子。如何强制返回按钮转到第一个视图控制器(swift)
答
如果你的意思是说:防止后退按钮导航到上一个控制器,并移动到第一个视图控制器: 你可以做到这一点通过创建自定义后退按钮 - 在故事板拖动一个按钮,左上方导航栏,并将其连接到您的视图控制器。在您的自定义后退按钮的选择写:
[self.navigationController popToRootViewControllerAnimated:YES]
答
假设你有一个视图控制器栈,如:VC1> VC2> VC3,并且要在VC3攻回来的时候要回VC1,那么你可以在设置该代码VC2:
[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc] initWithTitle:@"Back" style:(UIBarButtonItemStylePlain) target:self action:@selector(backToVC1)]];
然后,总是在VC2:
- (void)backToVC1
{
[self.navigationController popToRootViewControllerAnimated:YES];
}
答
自定义后退按钮似乎是最好的解决方案。动作方法内部的代码看起来像在迅速以下几点:
self.navigationController?.popToRootViewControllerAnimated(true)
//只要改变时真亦假,如果你不希望它做动画。
我希望这有助于(如果你还没有找到答案)。干杯!
答
当然,你可以实现一个自定义后退按钮。但也有一个很好的方法来继续使用默认按钮。
在致电super.viewWillDisappear()
之前,只需检查当前viewController是否仍位于viewWillDisappear
的导航堆栈中。如果不是,后退按钮已被按下。然后你可以做popToRootViewControllerAnimated
。
override func viewWillDisappear(animated: Bool) {
if (navigationController?.viewControllers)!.contains(self) {
// back button was pressed
self.navigationController?.popToRootViewControllerAnimated(animated)
}
super.viewWillDisappear(animated)
}
是Objective-C的?我试图在Swift中做,不知道如何映射它,但感谢想法:) – 2015-03-14 03:42:26