如何强制返回按钮转到第一个视图控制器(swift)

问题描述:

我有几个视图控制器嵌入在导航控制器的故事板。 由于故事板后面视图中的导航逻辑,后退按钮(位于导航栏左上角)不会返回到第一个视图。我想知道在哪里以及如何更改第二个视图的后退按钮的这种行为。欣赏任何想法,例子。如何强制返回按钮转到第一个视图控制器(swift)

enter image description here

如果你的意思是说:防止后退按钮导航到上一个控制器,并移动到第一个视图控制器: 你可以做到这一点通过创建自定义后退按钮 - 在故事板拖动一个按钮,左上方导航栏,并将其连接到您的视图控制器。在您的自定义后退按钮的选择写:

[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]; 
} 
+0

是Objective-C的?我试图在Swift中做,不知道如何映射它,但感谢想法:) – 2015-03-14 03:42:26

自定义后退按钮似乎是最好的解决方案。动作方法内部的代码看起来像在迅速以下几点:

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