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];

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 になります。複数のセルを正常に表示します。セルをクリックすると、

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

ナビゲーション バーが「vc」の新しいタイトルに変更され、ナビゲーション バーの戻るボタンも表示されていることがわかります。ただし、ビューは変更されていません。コレクションビューにアクセスできます。

ただし、accountviewcontroller などの tabbarcontroller の他のタブを押してから、homeviewcontroller の古いタブに戻ると、ビューが表示されます。これは非常に奇妙な動作で、なぜ発生するのかわかりません。

また、各View Controllerで、self.navigationcontrollerがnilでないことも確認しました

4

3 に答える 3

1

問題がタブバーコントローラーのサブクラスにあることがわかりました。

- (void)viewWillAppear:(BOOL)animated

不足している

[super viewWillAppear:animated];
于 2013-03-20T22:10:56.080 に答える
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];
于 2013-03-20T06:47:03.803 に答える
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];
于 2013-03-20T05:51:33.770 に答える