如何强制后退按钮返回到第一个视图控制器(Swift)

3
我有几个视图控制器嵌入在导航控制器中的故事板。 由于后续视图中的导航逻辑,返回按钮(在导航栏左上角)不会返回到第一个视图。我想知道在哪里以及如何仅更改第二个视图的“返回”按钮行为。欢迎任何想法和示例。
4个回答

6
当然,您可以实现自定义返回按钮。但是还有一种不错的方法可以继续使用默认按钮。
只需在viewWillDisappear中检查当前视图控制器是否仍在导航堆栈中,然后再调用super.viewWillDisappear()。如果不在,则返回按钮已被按下。然后您可以执行popToRootViewControllerAnimated
override func viewWillDisappear(animated: Bool) {
    if (navigationController?.viewControllers)!.contains(self) {
        // back button was pressed
        self.navigationController?.popToRootViewControllerAnimated(animated)
    }
    super.viewWillDisappear(animated)
}

请修复代码中的逻辑错误:如果控制器不在导航栈中,则(...)。当前代码每当控制器在导航栈中时都会弹出到根视图控制器(必须相反)。 - pjuzeliunas

5
自定义返回按钮似乎是最好的解决方案。在 Swift 中,您的操作方法中的代码将如下所示:
self.navigationController?.popToRootViewControllerAnimated(true)

//如果你不想它动画化,只需将true更改为false。

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


1
如果你的意思是:防止后退按钮导航到先前的控制器并移动到第一个视图控制器:你可以通过创建自定义“返回”按钮来实现-将一个按钮拖到故事板中的导航栏左上方,并将其与你的视图控制器连接。在你的自定义“返回”按钮选择器中编写以下内容:
[self.navigationController popToRootViewControllerAnimated:YES]

0
假设您有一个视图控制器堆栈,如: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];
}

这是Objective-C吗?我正在尝试用Swift实现,不确定如何映射它,但感谢您的想法 :) - Artis Universe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接