iOS 禁止在按下标签栏按钮时弹出到根视图
iOS Disable popping to root view on pressing tab bar button
我希望禁用按下选项卡栏并返回到导航层次结构中的根视图的功能,同时为导航栏中的按钮保留此功能。
所以我希望用户返回根视图的唯一方法是按下导航栏中的按钮,而不是点击标签栏按钮。
我环顾四周并尝试了几种解决方案,但 none 似乎有效,因为它们禁用了导航栏按钮和标签栏按钮的功能,而不仅仅是标签栏按钮。
谢谢!
一种可能性是创建 UITabBarController
的子类并实现 UITabBarControllerDelegate
协议。
然后你可以实现
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
和 return NO
,当再次选择特定的 viewController 时。
一种方法是保存最近选择的项目并将其与当前选择的项目进行比较。
周末遇到这个问题。我一直发现我的自定义 TabBarController 在 appDelegate didfinishlaunching() 方法期间为零。
我解决这个问题的方法是让我的自定义 TabBarController 成为 UITabBarControllerDelegate,然后在自定义 TabBarController 中实现以下委托方法 class:
// Stops View Controllers from being dismissed when a tab is selected on the UITabBarController
public func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
return viewController != tabBarController.selectedViewController
}
我希望禁用按下选项卡栏并返回到导航层次结构中的根视图的功能,同时为导航栏中的按钮保留此功能。
所以我希望用户返回根视图的唯一方法是按下导航栏中的按钮,而不是点击标签栏按钮。
我环顾四周并尝试了几种解决方案,但 none 似乎有效,因为它们禁用了导航栏按钮和标签栏按钮的功能,而不仅仅是标签栏按钮。
谢谢!
一种可能性是创建 UITabBarController
的子类并实现 UITabBarControllerDelegate
协议。
然后你可以实现
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
和 return NO
,当再次选择特定的 viewController 时。
一种方法是保存最近选择的项目并将其与当前选择的项目进行比较。
周末遇到这个问题。我一直发现我的自定义 TabBarController 在 appDelegate didfinishlaunching() 方法期间为零。
我解决这个问题的方法是让我的自定义 TabBarController 成为 UITabBarControllerDelegate,然后在自定义 TabBarController 中实现以下委托方法 class:
// Stops View Controllers from being dismissed when a tab is selected on the UITabBarController
public func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
return viewController != tabBarController.selectedViewController
}