Navigation UITabBarController并以编程方式切换到另一个选项卡
在用户登录到我的应用程序后,我构建了一些视图控制器和一个UITabBarController,它将在我的应用程序的其余部分保持不变。以下是代码:Navigation UITabBarController并以编程方式切换到另一个选项卡,navigation,uitabbarcontroller,viewcontroller,selectedindex,Navigation,Uitabbarcontroller,Viewcontroller,Selectedindex,在用户登录到我的应用程序后,我构建了一些视图控制器和一个UITabBarController,它将在我的应用程序的其余部分保持不变。以下是代码: ....... //construction of view controllers, standard NSMutableArray *topLevelControllers = [[[NSMutableArray alloc] init] autorelease]; [topLevelControllers addObject: pay
.......
//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;
那么让我们假设在我的CustomernVcontroller中有一个表视图,我想将用户切换到paymentNavController,同时切换tabBarController的选定索引
那么,我如何从其中一个视图控制器访问UITabBarController呢?我假设您有一个AppDelegate,对吗?如果是这样,您有如下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self.window addSubview:tabBarController.view];
[self.window makeKeyAndVisible];
return YES;
}
然后,在你的逻辑中,使用
[self.delegate ...]
跨不同的控制器工作。请在此处阅读详细信息:
我假设你有一个AppDelegate,对吗?如果是这样,您有如下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self.window addSubview:tabBarController.view];
[self.window makeKeyAndVisible];
return YES;
}
然后,在你的逻辑中,使用
[self.delegate ...]
跨不同的控制器工作。请在此处阅读详细信息:
我最终使用了一种静态方法,全局存储选项卡栏,以便以后可以访问它。这在名为“LoginViewController”的文件中声明 然后在初始化导航控制器后,我访问选项卡栏控制器,如下所示,并对其进行配置:
UITabBarController *tabBarController = [LoginViewController tabBarController];
然后我可以在任何地方访问它,并通过编程方式切换视图:
UITabBarController *tabBar = [LoginViewController tabBarController];
//do anything with view controllers, pass values etc here before switching views
[tabBar setSelectedIndex:1];
最后,我使用了一个静态方法,全局存储选项卡栏,以便以后可以访问它。这在名为“LoginViewController”的文件中声明 然后在初始化导航控制器后,我访问选项卡栏控制器,如下所示,并对其进行配置:
UITabBarController *tabBarController = [LoginViewController tabBarController];
然后我可以在任何地方访问它,并通过编程方式切换视图:
UITabBarController *tabBar = [LoginViewController tabBarController];
//do anything with view controllers, pass values etc here before switching views
[tabBar setSelectedIndex:1];
任何具有父/祖先UITabBarController的控制器(无论其在层次结构中有多深)都可以通过[self-tabBarController]
访问它
这同样适用于具有属性的UINavigationControllernavigationController
任何具有父/祖先uitabarcontroller的控制器(无论其在层次结构中有多深)都可以通过[self tabBarController]
访问它
属性为
navigationController
的UINavigationController也同样适用。tabBarController直到用户登录后在程序中初始化。我的应用程序代理首先使用导航控制器,然后在另一个视图控制器中以编程方式启动tabBarController。tabBarController直到用户登录后在程序中才初始化。My app delegate首先使用导航控制器,然后在另一个视图控制器中以编程方式启动Tabbar控制器。选项卡栏和选项卡栏控制器是两种不同的东西。选项卡栏和选项卡栏控制器是两种不同的东西。