UITabBars无法识别导航栏和导航栏隐藏表视图控制器

时间:2013-10-19 00:05:52

标签: iphone ios objective-c uinavigationcontroller uitableview

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

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中我为后退按钮和一个选择器设置了一个图像,因为Image已设置且选择器弹出它离开堆栈。我也可以在pViewController,iViewController,sViewController和mViewController中加载数据和执行操作。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果要记录navigationController和tabBarController,则应该在(void)viewWillAppear:(BOOL)animated而不是(void)viewDidLoad内进行。