Ios 当导航栏';s内置的后退按钮被按下
每当按下俯视图控制器上的“后退”按钮时,我都希望返回到不是上一个视图控制器的特定视图控制器。我希望有一种方法可以以某种方式覆盖后退按钮的功能 编辑: 我让这个工作:Ios 当导航栏';s内置的后退按钮被按下,ios,swift,uinavigationcontroller,uinavigationbar,Ios,Swift,Uinavigationcontroller,Uinavigationbar,每当按下俯视图控制器上的“后退”按钮时,我都希望返回到不是上一个视图控制器的特定视图控制器。我希望有一种方法可以以某种方式覆盖后退按钮的功能 编辑: 我让这个工作: self.navigationController?.popToRootViewController(动画:true) 唯一的问题是,在设置动画时,它会将中间视图控制器显示为其指向根 阅读您编辑的问题,似乎您要查找的是在导航堆栈中弹出回根视图控制器,而不显示动画中的任何视图控制器 通过从堆栈中删除所有中间视图控制器,可以轻松实现这一
self.navigationController?.popToRootViewController(动画:true)
唯一的问题是,在设置动画时,它会将中间视图控制器显示为其指向根 阅读您编辑的问题,似乎您要查找的是在导航堆栈中弹出回根视图控制器,而不显示动画中的任何视图控制器 通过从堆栈中删除所有中间视图控制器,可以轻松实现这一点 在上次显示的视图控制器的
viewDidLoad
方法中,执行以下操作:
func viewDidLoad() {
super.viewDidLoad()
if let rootVC = navigationController?.viewControllers.first {
navigationController?.viewControllers = [rootVC, self]
}
}
然后,当点击后退按钮时,导航控制器将关闭返回根目录的当前视图控制器。基于:
导航控制器对象使用称为导航堆栈的有序数组管理其子视图控制器。阵列中的第一个视图控制器是根视图控制器,表示堆栈的底部。阵列中的最后一个视图控制器是堆栈上最顶部的项,表示当前正在显示的视图控制器您可以使用segues或使用此类方法从堆栈中添加和删除视图控制器
要在没有动画的情况下实现pop,应执行以下操作:
- 访问viewControllers属性,该属性是UINavigationController堆栈,但您可以从此数组中的每个位置弹出。 var viewControllers:[UIViewController] 当前位于导航堆栈上的视图控制器
yourViewController.navigationController.viewControllers = [specificVC,self]
- 最好创建一个扩展名,并在任何地方调用它:
还有一个问题。当我这样做时,它似乎覆盖了我设置的后退按钮文本。我试图通过将后退按钮文本添加到viewDidLoad()中来重置后退按钮文本,但仍不起作用。显示最终视图控制器时,后退按钮标题应与根视图控制器的标题匹配。您可以在根视图控制器的
viewDidLoad
中使用navigationItem.title=“My title”
进行设置。
import UIKit
extension: UIViewController {
func setNext(to root: UIViewController? = nil) {
guard let navigation = self.navigationController,
let first = navigation.viewControllers.first else {return}
if let root = root {
navigation.viewControllers = [root,self]
}else{
navigation.viewControllers = [first,self]
}
}
}
self.setNext(to: specificVC)