UITabBarController并以编程方式切换到另一个选项卡

时间:2011-05-05 19:53:38

标签: navigation uitabbarcontroller viewcontroller selectedindex

用户登录我的应用程序后,我构建了一些视图控制器和一个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 个答案:

答案 0 :(得分:4)

我最终使用静态方法并在全局存储标签栏,以便稍后可以访问它。这是在名为“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];

答案 1 :(得分:2)

具有父/祖先UITabBarController的任何控制器(无论层次结构有多深)都可以通过[self tabBarController]访问它。

对于具有属性navigationController的UINavigationController也是如此。

答案 2 :(得分:0)

我假设你有一个AppDelegate,对吗?如果是这样,你有这样的代码:

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

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

return YES;

}

然后,在您的逻辑中,使用

[self.delegate ...]

跨越不同的控制器。阅读详情: View Controller Programming