当前,我使用视图控制器来推送另一个视图控制器,但不允许用户返回以前的视图控制器。我已经隐藏了后退按钮,但是在快捷键4中,当两次按下Tabbar时,用户能够自动自动导航到导航栏中的rootviewcontroller。关于Swift 4.2解决此问题的任何建议?
答案 0 :(得分:2)
基本上,以下函数可以很好地完成工作,在运行时只需调用一件事即可在标签栏控制器中设置 delegate = self 。
extension TabBarController: UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
return viewController != tabBarController.selectedViewController
}}
信用@Azat
答案 1 :(得分:0)
您可以使用此扩展名禁用双击。
extension TabBarController: UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
return viewController != tabBarController.selectedViewController
}}
答案 2 :(得分:0)
您可以使用setViewControllers([newViewController], animated: true)
而不是push
,这样一来,堆栈中就不会再有视图控制器了。
答案 3 :(得分:0)
您可以继承UITabBarController
的类,将标签栏控制器设为自己的委托并实现以下委托功能:
class TabBarController: UITabBarController, UITabBarControllerDelegate {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
delegate = self
}
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
delegate = self
}
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
return viewController != selectedViewController
}
}
这样,用户只能选择尚未选择的选项卡栏项目。