UITabBarController и переключение на другую вкладку программно - PullRequest
0 голосов
/ 05 мая 2011

После входа пользователя в мое приложение я создаю несколько контроллеров представления и UITabBarController, который затем сохраняется в остальной части моего приложения. Вот код для этого:

    .......
//construction of view controllers, standard 

NSMutableArray *topLevelControllers = [[[NSMutableArray alloc] init] autorelease];
[topLevelControllers addObject: paymentNavController];
[topLevelControllers addObject: customerNavController];
[topLevelControllers addObject: historyNavController];    

UITabBarController *tabBarController = [[[UITabBarController alloc] init] autorelease];
tabBarController.delegate = self;
[tabBarController setViewControllers:topLevelControllers animated:NO];
tabBarController.selectedIndex = 1;

Итак, давайте скажем, что в моем customerNavController у меня есть табличное представление, и я хочу переключить пользователя на paymentNavController, переключая также выбранный индекс tabBarController.

Так как я могу, с одного из контроллеров представления, который он содержит, получить доступ к этому UITabBarController?

Ответы [ 3 ]

4 голосов
/ 16 мая 2011

В итоге я использовал статический метод и сохранил панель вкладок глобально, чтобы позже получить к ней доступ. Это объявлено в файле с именем «LoginViewController»

static id gGlobalInstanceTabBar = nil;
+ (UITabBarController *) tabBarController
{
    if (!gGlobalInstanceTabBar)
    {
        gGlobalInstanceTabBar = [[UITabBarController alloc] init];
    }
    return gGlobalInstanceTabBar;
}

Затем, после инициализации моих контроллеров навигации, я получаю доступ к контроллеру панели вкладок следующим образом и настраиваю его:

UITabBarController *tabBarController = [LoginViewController tabBarController];

Тогда я могу получить к нему доступ в любом месте и программно переключаться между представлениями:

    UITabBarController *tabBar = [LoginViewController tabBarController];
//do anything with view controllers, pass values etc here before switching views
[tabBar setSelectedIndex:1];
2 голосов
/ 19 июля 2011

Любой контроллер (как бы глубоко он ни был в иерархии), у которого есть родитель / предок UITabBarController, может получить к нему доступ через [self tabBarController].

То же самое работает для UINavigationController со свойством navigationController.

0 голосов
/ 06 мая 2011

Я предполагаю, что у вас есть AppDelegate, верно?Если это так, у вас есть такой код:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

[self.window addSubview:tabBarController.view];
[self.window makeKeyAndVisible];

return YES;

}

Затем в вашей логике используйте

[self.delegate ...]

для работы на разных контроллерах.Подробности здесь: Просмотр программирования контроллера

...