Загрузить все представления TabBar - PullRequest
24 голосов
/ 09 февраля 2012

В качестве корневого контроллера просмотра у меня есть контроллер панели вкладок. Я хотел бы предварительно загрузить виды вкладки [1,2,3] (вкладка 0 автоматически загружается в качестве первой вкладки).

Мне бы хотелось, чтобы код в viewdidload запускался до того, как пользователь нажал на вкладку.

Спасибо

Ответы [ 7 ]

33 голосов
/ 09 февраля 2012

Если вы возьмете код инициализации своего представления и переместите его в loadView вместо viewDidLoad, вы можете принудительно загрузить каждый из UIViewController, являющихся частью вашего UITabBarController, просто вызвав viewController.view. Это происходит потому, что UIViewController создаст объект представления через функцию loadView, когда его об этом попросят.

for(UIViewController * viewController in  tabBarController.viewControllers){
   viewController.view;
}

или более просто

[tabBarController.viewControllers makeObjectsPerformSelector:@selector(view)];
15 голосов
/ 16 сентября 2015

В iOS 8 я создал подкласс UITabViewController с именем TSMainBarViewController. В функции viewDidLoad TSMainBarViewController я просто добавил этот код:

for(UINavigationController * viewController in self.viewControllers){
    [[viewController.viewControllers firstObject] view];
}

Затем будут загружены все viewControllers (корневой viewController из UINavigationController). Все мои viewControllers созданы в StoryBoard. Не реализуйте функцию loadView в UIViewController.


Код Swift 3 от EligyD:

for viewController in self.viewControllers! {
    _ = viewController.view
}
8 голосов
/ 18 декабря 2015

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

viewControllers?.forEach {
    if let navController = $0 as? UINavigationController {
        navController.topViewController?.view
    } else {
        $0.view.description
    }
}
2 голосов
/ 24 мая 2017

Если все ваши контроллеры представления под контроллером панели вкладок имеют встроенную панель навигации:

Swift 3

for navViewController in self.viewControllers! {
    _ = navViewController.childViewControllers[0].view
}

Решение пользователя Panda у меня не сработало.

1 голос
/ 12 сентября 2015

если у вас есть UINavigationController до ваших просмотров

for viewController in self.tabBarController!.viewControllers! {
    var aView = viewController.topViewController as UIViewController
    aView.view.description
}
0 голосов
/ 01 февраля 2017

Swift 3:

В viewDidLoad() вашего UITabBarController

for viewController in self.viewControllers! {
    _ = viewController.view
}
0 голосов
/ 09 декабря 2014

Свифт эквивалент ...

for viewController in self.tabBarController.viewControllers!
{
    viewController.view;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...