IOS在tabbarcontroller中从navigationcontroller推送viewcontroller但是没有显示

时间:2013-03-20 05:45:50

标签: iphone ios navigationcontroller tabbarcontroller

我遇到了一个非常奇怪的问题。

以下是我的app delegate中的代码结构:

self.accountViewController = [[AccountViewController alloc] initWithNibName:@"AccountViewController" bundle:nil];
self.homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
self.exploreViewController = [[ExploreViewController alloc] initWithNibName:@"ExploreViewController" bundle:nil];
self.activityViewController = [[ActivityViewController alloc] initWithNibName:@"ActivityViewController" bundle:nil];
self.homeNavigationController = [[UINavigationController alloc] initWithRootViewController:self.homeViewController];
self.accountNavigationController = [[UINavigationController alloc] initWithRootViewController:self.accountViewController];
self.activityNavigationController = [[UINavigationController alloc] initWithRootViewController:self.activityViewController];
self.exploreNavigationController = [[UINavigationController alloc] initWithRootViewController:self.exploreViewController];

self.tabBarController = [[MyOwnTabBarController alloc] init];
[self.tabBarController setDelegate:self];
[self.tabBarController setViewControllers:[NSArray arrayWithObjects:self.homeNavigationController, self.exploreNavigationController,self.activityNavigationController,self.accountNavigationController,nil]];
[self.tabBarController setSelectedIndex:0];
[self.navController setViewControllers:[NSArray arrayWithObjects:self.welcomeViewController, self.tabBarController, nil] animated:NO];

对于那个self.navController,我像这样定义

self.navController = [[UINavigationController alloc] initWithRootViewController:self.welcomeViewController];
self.window.rootViewController = self.navController;

所以在tabbarcontroller出现后,我将在homeviewcontroller,我有一个collectionview。它成功显示多个细胞。当我点击单元格时,

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    [self.navigationController pushViewController:vc animated:YES];
}

我看到导航栏已更改为“vc”中的新标题,导航栏的后退按钮也会显示。但是,视图没有更改,我仍然可以访问collectionview。

但是,如果我按下tabbarcontroller上的其他选项卡(例如accountviewcontroller),然后再次按回homeviewcontroller的旧选项卡,现在将显示该视图。这是一种非常奇怪的行为,我不知道它为什么会发生。

我还检查了每个视图控制器中的self.navigationcontroller不是nil

3 个答案:

答案 0 :(得分:1)

发现问题出在tabbarcontroller的子类

- (void)viewWillAppear:(BOOL)animated

缺少

[super viewWillAppear:animated];

答案 1 :(得分:0)

据我了解。只需检查是否已将navigationController添加到tabBar。检查下面。如果没有传达总体情景。

tabBarControllerObj=[[UITabBarController alloc]init];
    NSArray *arrayObj=[[NSArray alloc]initWithObjects:navForView1,navForView2,navForView3,navForView4,navForView5, nil];

    [tabBarControllerObj setSelectedIndex:0];
    tabBarControllerObj.tabBar.hidden = YES;
    [tabBarControllerObj setViewControllers:arrayObj];
    [self.window addSubview:tabBarControllerObj.view];

答案 2 :(得分:0)

self.accountViewController = [[AccountViewController alloc] initWithNibName:@"AccountViewController" bundle:nil];
self.homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
self.exploreViewController = [[ExploreViewController alloc] initWithNibName:@"ExploreViewController" bundle:nil];
self.activityViewController = [[ActivityViewController alloc] initWithNibName:@"ActivityViewController" bundle:nil];
self.homeNavigationController = [[UINavigationController alloc] initWithRootViewController:self.homeViewController];
self.accountNavigationController = [[UINavigationController alloc] initWithRootViewController:self.accountViewController];
self.activityNavigationController = [[UINavigationController alloc] initWithRootViewController:self.activityViewController];
self.exploreNavigationController = [[UINavigationController alloc] initWithRootViewController:self.exploreViewController];
if (tabBarControllerObj!=nil) {
tabBarControllerObj=nil;
}
tabBarControllerObj=[[UITabBarController alloc]init];
NSArray *arrayObj=[[NSArray alloc]initWithObjects:self.homeNavigationController,self.accountNavigationController,self.activityNavigationController,self.exploreNavigationController, nil];
[tabBarControllerObj setSelectedIndex:0];
tabBarControllerObj.tabBar.hidden = YES;
[tabBarControllerObj setViewControllers:arrayObj];
[self.window addSubview:tabBarControllerObj.view];