Swift 禁用选项卡控制器中除主页以外的所有按钮
我一直在搜索,似乎找不到如何在用户登录或创建帐户之前禁用除“主页”按钮以外的所有选项卡栏项目Swift 禁用选项卡控制器中除主页以外的所有按钮,swift,xcode,authentication,uitabbaritem,Swift,Xcode,Authentication,Uitabbaritem,我一直在搜索,似乎找不到如何在用户登录或创建帐户之前禁用除“主页”按钮以外的所有选项卡栏项目 请注意,这是一种黑客方式,因此您可以根据需要进行修改 您将遵守UITABBARCONTROLLEDELEGATE,并使您的VC在viewDidLoad中成为它的代理 if let viewControllers = self.tabBarController?.viewControllers { for viewController in viewControllers {
- 请注意,这是一种黑客方式,因此您可以根据需要进行修改
- 您将遵守UITABBARCONTROLLEDELEGATE,并使您的VC在viewDidLoad中成为它的代理
if let viewControllers = self.tabBarController?.viewControllers {
for viewController in viewControllers {
if viewController != viewControllers[0] { // assuming your homeViewController index is 0
tabBarController?.tabBarItem.isEnabled = false
}
}
}
- 注意,如果您在基本VC中执行此步骤,将会更好,并为您节省代码
- 请注意,这是一种黑客方式,因此您可以根据需要进行修改
- 您将遵守UITABBARCONTROLLEDELEGATE,并使您的VC在viewDidLoad中成为它的代理
- 以下是我的方法
if let viewControllers = self.tabBarController?.viewControllers {
for viewController in viewControllers {
if viewController != viewControllers[0] { // assuming your homeViewController index is 0
tabBarController?.tabBarItem.isEnabled = false
}
}
}
- 注意,如果您在基本VC中执行此步骤,将会更好,并为您节省代码
for i in 0..<tabbarController.tabBar.items!.count {
let item = tabbarController.tabBar.items![i]
item.isEnabled = i == indexOfHomeTab
}
对于0中的i..您可以在选项卡栏中循环所有项目并禁用所需的项目
for i in 0..<tabbarController.tabBar.items!.count {
let item = tabbarController.tabBar.items![i]
item.isEnabled = i == indexOfHomeTab
}
对于0中的i..将其放在viewDidLoad()中的某个位置
将其放在viewDidLoad()中的某个位置
您可以执行如下操作,创建一个自定义类(TabBarController),从UITabBarController扩展它,并在TabBarController类中编写代码
将TabBarController类分配给UITabBarController
extension TabBarController: UITabBarControllerDelegate{
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
// allow your desired controller to be tapped
if tabBarController.selectedIndex == indexOfHomeControllerInTabBar {
return true
}
return false
}
}
注意:Apple不建议阻止Tabbar,有关更多信息,请查看此链接。您可以执行以下操作,创建自定义类(TabBarController),从UITabBarController扩展它,并在TabBarController类中编写代码
将TabBarController类分配给UITabBarController
extension TabBarController: UITabBarControllerDelegate{
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
// allow your desired controller to be tapped
if tabBarController.selectedIndex == indexOfHomeControllerInTabBar {
return true
}
return false
}
}
注意:苹果不建议阻止选项卡栏,有关更多信息,请查看此链接。简短的回答可能是“不要这样做”。选项卡栏中的选项卡应允许用户在UI顶层的始终可用屏幕之间切换。如果你阅读苹果的HIG,我想你会发现你正在尝试做的是不被推荐的
最好让其他屏幕显示某种禁用/非活动状态。简短的回答可能是“不要这样做”。选项卡栏中的选项卡应该允许用户在UI顶层的始终可用的屏幕之间切换。如果你阅读苹果的HIG,我想你会发现你正在尝试做的是不被推荐的
最好让其他每个屏幕都显示某种禁用/非活动状态。有时假装用户界面是一种解决方案1)隐藏选项卡2)定义一个类似选项卡的UIView 3)仅为主页按钮或其他视图定义操作只能是图像。小结:定义一个带有一个按钮和图像的假tabbar(UIVİew):@GökhanSayılgan假装用户界面永远不是解决方案。总有一种方法。你不必通过硬编码来完成所有事情-有时假装UI是一种解决方案1)隐藏选项卡2)定义一个看起来像选项卡的UI视图3)仅为主页按钮或其他视图定义操作只能是图像。小结:定义一个带有一个按钮和图像的假tabbar(UIVİew):@GökhanSayılgan假装用户界面永远不是解决方案。总有办法的。你不必通过硬编码来完成所有的事情-_-