在ios中创建条件选项卡栏

在ios中创建条件选项卡栏,ios,swift,tabs,Ios,Swift,Tabs,我正在开发一款IOS应用程序,它使用标签进行导航。该应用程序允许用户访问视频库。然而,有两种类型的用户,一种是购买个人剧集的用户,另一种是订阅的用户。前者只能访问他们购买的视频,而后者可以访问图书馆中的每一个视频 在我的标签栏(故事板)中,我有一个“购买”按钮,但如果用户是订户,我不希望出现此标签 应用程序会检查用户是否在启动时登录,并检查用户状态(买家或订户)。我想知道是否有办法根据用户类型加载不同的选项卡集 如果有人能把我引向正确的方向,我会非常感激。谢谢 从我的头脑中我可以想出几种方法,但

我正在开发一款IOS应用程序,它使用标签进行导航。该应用程序允许用户访问视频库。然而,有两种类型的用户,一种是购买个人剧集的用户,另一种是订阅的用户。前者只能访问他们购买的视频,而后者可以访问图书馆中的每一个视频

在我的标签栏(故事板)中,我有一个“购买”按钮,但如果用户是订户,我不希望出现此标签

应用程序会检查用户是否在启动时登录,并检查用户状态(买家或订户)。我想知道是否有办法根据用户类型加载不同的选项卡集


如果有人能把我引向正确的方向,我会非常感激。谢谢

从我的头脑中我可以想出几种方法,但这可以做到。我假设您可以根据服务器的响应或类似的信息知道登录的是哪种用户

  • 创建您自己的类,该类根据用户的不同而变化,例如:

    MyTabBarController: UITabBarController {
    
     override func viewDidLoad() {
         if (currentUser == admin) {
           setupAdminTabBar()
         } else { 
           setupRegularTabBar()
         }
      }
    }
    
  • 然后在每个函数上执行如下操作

    func setupRegularTabBar() {
    //do this many as many times as root view controllers you want
        let searchNavController = createMyNavController(unselectedImage: UIImage(named: "yourimage"), selectedImage: UIImage(named: "yourimage"), rootViewController: UserSearchController(collectionViewLayout: UICollectionViewFlowLayout()))
    //add the other controllers that you create like the one above...
      viewControllers = [searchNavController]
    }
    
    fileprivate func createMyNavController (unselectedImage: UIImage, selectedImage: UIImage, rootViewController : UIViewController = UIViewController()) -> UINavigationController {
            let viewController = rootViewController
            let navController = UINavigationController(rootViewController: viewController)
            navController.tabBarItem.image = unselectedImage
            navController.tabBarItem.selectedImage = selectedImage
            return navController
        }
    

    您可以使用UITabBarController的
    setViewControllers
    功能:

    func setViewControllers(_ viewControllers: [UIViewController]?, animated: Bool)
    

    在故事板中设置所有可能的控制器,每个控制器都有一个单独的插座。然后将希望显示的插座阵列传递给UITabBarController子类
    setViewControllers

    并使用
    setViewControllers(uquo:animated:)

    class MyTabBarController: UITabBarController 
    {
    
        override func viewDidLoad() 
        {
            super.viewDidLoad()
    
            switch user
            {
            case .buyer:
                guard let vc1 = storyboard?.instantiateViewController(withIdentifier: "first"),
                      let vc2 = storyboard?.instantiateViewController(withIdentifier: "second") else
                {
                    return
                }
    
                setViewControllers([vc1, vc2], animated: true)
    
            case .subscriber:
                guard let vc3 = storyboard?.instantiateViewController(withIdentifier: "third"),
                      let vc4 = storyboard?.instantiateViewController(withIdentifier: "fourth") else
                {
                    return
                }
    
                setViewControllers([vc3, vc4], animated: true)
            }
        }
    }