Navigation 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

在用户登录到我的应用程序后,我构建了一些视图控制器和一个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;
那么让我们假设在我的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]
访问它

这同样适用于具有属性的UINavigationController
navigationController

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


属性为
navigationController

的UINavigationController也同样适用。tabBarController直到用户登录后在程序中初始化。我的应用程序代理首先使用导航控制器,然后在另一个视图控制器中以编程方式启动tabBarController。tabBarController直到用户登录后在程序中才初始化。My app delegate首先使用导航控制器,然后在另一个视图控制器中以编程方式启动Tabbar控制器。选项卡栏和选项卡栏控制器是两种不同的东西。选项卡栏和选项卡栏控制器是两种不同的东西。