Ios 如何强制后退按钮转到第一视图控制器(swift)

Ios 如何强制后退按钮转到第一视图控制器(swift),ios,xcode,swift,Ios,Xcode,Swift,我在导航控制器中嵌入了几个视图控制器的故事板。 由于故事板后续视图中的导航逻辑,后退按钮(位于导航栏左上角)不会返回到第一个视图。我想知道在哪里以及如何改变这种行为的后退按钮的第二次查看只。欣赏任何想法、例子 如果您想说:阻止后退按钮导航到上一个控制器并移动到第一个视图控制器: 您可以通过创建一个自定义的后退按钮来实现这一点—将情节提要中的一个按钮拖动到导航栏的左上角,并将其连接到视图控制器。在自定义后退按钮的选择器中写入: [self.navigationController popToRoo

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


如果您想说:阻止后退按钮导航到上一个控制器并移动到第一个视图控制器: 您可以通过创建一个自定义的后退按钮来实现这一点—将情节提要中的一个按钮拖动到导航栏的左上角,并将其连接到视图控制器。在自定义后退按钮的选择器中写入:

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

“自定义后退”按钮似乎是最佳解决方案。在swift中,操作方法中的代码如下所示:

self.navigationController?.popToRootViewControllerAnimated(true)
//如果不想设置动画,只需将true更改为false


我希望这能有所帮助(如果你还没有找到答案的话)。干杯

当然,您可以实现自定义后退按钮。但也有一种很好的方法可以继续使用默认按钮

在调用
super.viewwilldefine()之前,只需检查当前viewController是否仍在
viewwilldefine
中的导航堆栈中。如果不是,则已按下后退按钮。然后,您可以执行
popToRootViewControllerAnimated

override func viewWillDisappear(animated: Bool) {
    if (navigationController?.viewControllers)!.contains(self) {
        // back button was pressed
        self.navigationController?.popToRootViewControllerAnimated(animated)
    }
    super.viewWillDisappear(animated)
}

这是客观的吗?我正在尝试使用Swift,不知道如何映射它,但感谢您的想法:)请修复代码中的逻辑错误:如果它不在导航堆栈中,那么(…)。只要控制器位于导航堆栈中,当前代码就会弹出到根视图控制器(必须相反)。