【问题标题】:Making a conditional tab bar in ios在ios中制作条件标签栏
【发布时间】:2017-05-22 19:40:51
【问题描述】:

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

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

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

如果有人能引导我朝着正确的方向前进,我将不胜感激。谢谢!

【问题讨论】:

    标签: ios swift tabs


    【解决方案1】:

    从我的脑海中,我可以想到几种方法,但这可以做到。我假设您根据服务器的响应或类似的东西以某种方式知道登录了哪种用户。

    1. 创建您自己的类,该类会根据用户发生变化,例如:

      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
        }
    

    【讨论】:

      【解决方案2】:

      子类 UITabBarController 并使用 setViewControllers(_: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)
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        可以使用UITabBarController的setViewControllers函数:

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

        在情节提要中设置所有可能的控制器,每个控制器都有一个单独的插座。然后将您希望出现的插座数组传递给setViewControllers

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-02-24
          • 1970-01-01
          • 2017-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多