0

我在导航栏中有一个视图控制器,它推动一个标签栏视图控制器,该控制器有 4 个标签和视图控制器。当我NSLog(@"%@", self.navigationController)进入 TabBarViewController 的 viewDidLoad 时,它显示为 (null)。甚至NSLog(@"%@",self.tabBarController)在 TabBarViewController 的 viewDidLoad 中为 (null)。这很奇怪,因为我有一个选择器,用于后退按钮,称为dismissTab,我弹出视图控制器并且它可以工作。如果我在那里 NSLog 它不会出现 (null) 所以某处有问题。我有一种感觉,这就是我的每个选项卡的 ViewController 被 NavigationBar 和 TabBar 隐藏的原因。我已经阅读了有关 NavigationBar/TabBars 隐藏/覆盖控制器的一部分的帖子,但所有这些帖子都只是找到了调整表格视图大小或向下/向上更多对象的技巧。我想找到一个解决方案。

AppDelegate.m

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

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    UIStoryboard *iPhoneStoryBoard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    ViewController *mainViewController = (ViewController*)[iPhoneStoryBoard instantiateViewControllerWithIdentifier:@"HomePage"];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:mainViewController];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

当我按下 tabBars 时的ViewController.m

UIStoryboard *iPhoneStoryBoard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
        GRxTabBarViewController *tabViewController = (GRxTabBarViewController*) [iPhoneStoryBoard instantiateViewControllerWithIdentifier:@"GRxTabBarViewController"];

PViewController *pController = [tabViewController.viewControllers objectAtIndex:0];
SViewController *sController = [tabViewController.viewControllers objectAtIndex:1];
IViewController *iController = [tabViewController.viewControllers objectAtIndex:2];
MViewController *mController = [tabViewController.viewControllers objectAtIndex:3];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:iController];

[tabViewController setViewControllers:[NSArray arrayWithObjects:pController, sController, navController, mController, nil]];
[self.navigationController pushViewController:tabViewController animated:YES];

我不知道我可能哪里出错了,因为在GRxTabBarViewController的 viewDidLoad 中,我为后退按钮和选择器设置了一个图像,它可以工作,因为图像已设置并且选择器将其从堆栈中弹出。我还可以在 pViewController、iViewController、sViewController 和 mViewController 中加载数据并执行操作。

任何人都有这个问题或知道他们可以指导/指导我的解决方案吗?任何事情都有助于诚实。提前致谢!

4

2 回答 2

1

看起来您正在使用 Storyboard 将标签栏控制器连接到导航控制器内。我认为 Storyboard 允许你这样做,但我不确定这是否是标准的做法——除非你有一个非常引人注目/不可能做的要求,否则你应该总是能够使用标签栏控制器作为切换视图的保持控制器,然后将导航控制器作为根视图控制器放在任何选项卡栏视图中。我建议你看看改变你的控制器层次结构实现的可能性。从您的代码 AppDelegate.m 和 ViewController.m 代码片段来看,这似乎是可行的。

于 2013-10-19T00:33:58.367 回答
0

如果你想记录你的 navigationController 和 tabBarController,你应该在(void)viewWillAppear:(BOOL)animated里面而不是里面(void)viewDidLoad

于 2013-10-19T01:56:58.777 回答