0

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

4

3 回答 3

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];
于 2011-05-16T16:39:00.943 回答
2

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

具有属性的 UINavigationController 也是如此navigationController

于 2011-07-19T08:55:06.280 回答
0

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

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

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

return YES;

}

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

[self.delegate ...]

跨不同的控制器工作。在此处阅读详细信息: 查看控制器编程

于 2011-05-05T20:15:45.727 回答