1

У меня есть UITabBarController, и все мои другие контроллеры представлений подключены к нему. Теперь я хочу, чтобы показать один мой контроллер, как:Как я могу показать ViewController в UITabBarController?

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let vc: ViewController = storyboard.instantiateViewControllerWithIdentifier("ViewController") as! ViewController 

, но когда я попытался:

let rootViewController = self.window?.rootViewController as! UINavigationController 
rootViewController.pushViewController(vc, animated: true) 

он дал мне следующую ошибку:

Could not cast value of type 'UITabBarController' (0x1a899b818) to 'UINavigationController' 

Позже я пытался do:

let rootViewController = self.window?.rootViewController as! UITabBarController 

но в этом случае я получаю

UITabBar has no member pushViewController 

Как я могу показать/толкать мой ViewController так он будет выглядеть с UINavigationBar и внутри UITabBar?

ответ

6

Вам необходимо разместить каждый контроллер вашего вида в навигационном контроллере.

E.g. В настоящее время у вас есть TabBarViewController и два контроллера Вид:

  • ViewControllerA
  • ViewControllerB

Что вам нужно сделать, это вставить каждый из них внутри навигационного контроллера, так что вы бы:

  • UINavigationController -> ViewControllerA
  • UINavigationCon Троллингист -> ViewControllerB

Для того, чтобы толкнуть новый контроллер вы могли бы сделать:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let vc: ViewController = storyboard.instantiateViewControllerWithIdentifier("ViewController") as! ViewController 

let navViewController = myTabBar.selectedViewController as? UINavigationController 
navViewController?.pushViewController(vc, animated: true) 
+0

Я делаю это в AppDelegate, поэтому «myTabBar» здесь не видно. Могу ли я поставить 'UITabBarController' вместо этого? –

+0

@ J.Doe вы можете получить его таким образом: 'let myTabBar = self.window? .rootViewController as? UITabBarController' – fiks

+0

Хороший ответ, спас мой день. – Hasya

0

Could not cast value of type 'UITabBarController' (0x1a899b818) to 'UINavigationController'

Корневой-контроллер имеет тип UITabBarController. Поэтому вы должны использовать соответствующие методы этого класса, а не UINavigationController. Чтобы установить вид контроллеры используют либо

var viewControllers: [UIViewController]? или

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

Чтобы иметь навигационную панель, вам необходимо создать экземпляр UINavigationController и добавить контроллер вида к этому контроллеру навигации. Затем добавьте контроллер навигации в UITabBarController с помощью одного из указанных выше вариантов.

Смежные вопросы