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

Posted

技术标签:

【中文标题】如何强制返回按钮转到第一个视图控制器(swift)【英文标题】:How to Force Back Button to Go to First View Controller (swift) 【发布时间】:2015-03-13 15:27:38 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

在调用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)

【讨论】:

请修复代码中的逻辑错误:如果控制器不在导航堆栈中,则 (...)。只要控制器在导航堆栈中,当前代码就会弹出到根视图控制器(必须相反)。【参考方案2】:

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

self.navigationController?.popToRootViewControllerAnimated(true)

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

我希望这会有所帮助(如果您还没有找到答案)。干杯!

【讨论】:

【参考方案3】:

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

[self.navigationController popToRootViewControllerAnimated:YES]

【讨论】:

【参考方案4】:

假设您有一个视图控制器堆栈,例如: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 中做,不知道如何映射它,但感谢您的想法:)

以上是关于如何强制返回按钮转到第一个视图控制器(swift)的主要内容,如果未能解决你的问题,请参考以下文章

在转到下一个视图控制器(Swift)之前进行异步调用

SWIFT:在 TVOS 中退出收集时强制焦点引擎转到按钮

如何在 Swift 中的视图之间传递数据

向导航控制器添加按钮

iOS希望在按下按钮时延迟视图控制器之间的segue

更改按钮单击时的 viewController