Подтвердить что ты не робот

Загрузить все вкладки TabBar

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

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

Спасибо

4b9b3361

Ответ 1

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

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

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

[tabBarController.viewControllers makeObjectsPerformSelector:@selector(view)];

Ответ 2

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

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

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


Код Swift 3 от EligyD:

for viewController in self.viewControllers! {
    _ = viewController.view
}

Ответ 3

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

viewControllers?.forEach {
    if let navController = $0 as? UINavigationController {
        navController.topViewController?.view
    } else {
        $0.view.description
    }
}

Ответ 4

если у вас есть UINavigationController перед вашими представлениями

for viewController in self.tabBarController!.viewControllers! {
    var aView = viewController.topViewController as UIViewController
    aView.view.description
}

Ответ 5

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

Swift 3

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

Пользователь Panda не работал у меня.

Ответ 6

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

for viewController in self.tabBarController.viewControllers!
{
    viewController.view;
}

Ответ 7

Swift 3:

В viewDidLoad() вашего UITabBarController

for viewController in self.viewControllers! {
    _ = viewController.view
}