我无法访问标签栏控制器下的视图控制器。这是我的故事板的样子:
从View Controller A我有一个名为loginButton的IBAction,它连接到Tab Bar Controller,目前它看起来像这样:
- (IBAction)loginButton:(id)sender {
MyNavigationController *localNavigationController;
UIStoryboard * storyboard = self.storyboard;
MyTabBarController *tbc = [[MyTabBarController alloc] init];
NSMutableArray *localControllersArray = [[NSMutableArray alloc] initWithCapacity:1];
TabViewController *login = [storyboard instantiateViewControllerWithIdentifier: @ "TabViewController"];
localNavigationController = [[UINavigationController alloc] initWithRootViewController:login];
localNavigationController.delegate = self;
[localControllersArray addObject:localNavigationController];
tbc.viewControllers = localControllersArray;
tbc.delegate = self;
tbc.moreNavigationController.delegate = self;
tbc.selectedIndex = 0;
[self presentViewController:tbc animated:YES completion:^{
}];
}
我无法正确显示。我在这段代码中收到了一堆警告。并且它也没有显示标签栏底部的不同标签项,即使我已在每个标签上放置图像/文字。
那么如何正确显示/访问标签栏控制器内的视图控制器? (即视图控制器C / D / E)?
答案 0 :(得分:4)
您在问题中显示的故事板已经包含正确连接的标签栏控制器,导航控制器和登录控制器。因此,您不应该在代码中实例化新的选项卡栏控制器或导航控制器 - 当您实例化选项卡栏控制器时,它们将由故事板实例化。因此,您唯一需要做的就是给故事板中的标签栏控制器一个标识符,并执行此操作(假设标识符名为MyTabBarController):
- (IBAction)loginButton:(id)sender {
UITabBarController *tbc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyTabBarController"];
[self presentViewController:tbc animated:YES completion:nil];
}
如果您控制从“登录”按钮拖动到标签栏控制器,并选择“模态”,则甚至不需要此代码。这将创建一个模态segue,它将显示标签栏控制器,根本没有代码。
答案 1 :(得分:0)
如果您只想从tabBar控制器中选择另一个选项卡,请使用以下内容:
UITabBarController *tabBar = (UITabBarController *)self.window.rootViewController;
[tabBar setSelectedIndex:3];
请注意,如果tabBar控制器是初始视图控制器,您可以使用applicationDidFinishLaunching
方法获取它的实例并将其存储在AppDelegate中。然后你就可以像这样访问它:
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
请记住导入AppDelegate.h
答案 2 :(得分:0)
我建议您使用Singleton共享实例从多个控制器共享多个信息。 这是一个很好的设计模式供您使用。 我在可可上写了设计模式用法的样本(参见https://github.com/leverdeterre/DesignPatterns - > Real singleton)