Как программно назначить UIViewController вкладке UITabBarControllers

#storyboard #segue #swift3 #xcode8

#раскадровка #segue #swift3 #xcode8

Вопрос:

У меня есть два разных типа профилей для пользователей. Один предназначен для обычных пользователей, а другой — для премиум-пользователей. Я создал приложение, используя Storyboard in Xcode 8 . После запуска приложения оно запрашивает пользователя, является ли он обычным участником или премиум-участником. Для общего элемента поток отлично работает с подключенными переходами Storyboard . Значок UITabbar с профилем переводит пользователя в профиль. Но как я могу загрузить профиль премиум-пользователей в том же Storyboard программном режиме?

Комментарии:

1. О чем именно вы просите? «Как заменить a UIViewController внутри a UITabbarController ?» Или «Как создать экземпляр UIViewController из раскадровки программно»? Или оба?

2. Я хочу условную проверку профиля. Независимо от того, нажал ли пользователь кнопку «премиум-участник», а затем нажал кнопку на панели вкладок, он перейдет в профиль участника premiumm. Но я связал все viewcontrollers в раскадровке перетаскиванием CTRL. Как я могу сделать это программно

Ответ №1:

A UITabbarController имеет Array свойство, которое содержит UIViewController s, представленные его вкладками. У меня нет времени на тестирование, но в принципе вы можете получить его через:

 let tabBarController = self.view.window.rootViewController
let viewControllers = tabBarController.viewControllers
  

Затем вы можете изменить его в соответствии с вашими потребностями, например, установить премиум-логин на первую вкладку:

 let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil)
let premiumVc = storyboard.instantiateViewControllerWithIdentifier("identifierOfPremiumVC_mustBeSetInStoryboardsInspector") as! UIViewController
viewControllers[0] = premiumVc