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