私はAppleのドキュメントと同様のStackOverflowの質問をよく見てきましたが、タブバーを使用しているときにnavigationControllerがnullになる理由に固執しています。私はほとんどのアプリをコードから構築しようとしていますが、ナビゲーションコントローラーを挿入するためにXIBを使用していません。
デバッグ中、アプリを2つのタブに大幅に簡素化しました。1つのタブにはテーブルビューがあり、行に触れると(XIBからの)詳細ページが表示されることを期待しています。かなりシンプルなはずです。詳細ビューをプッシュしようとすると、self.navigationControllerの値がNULLであることがわかりましたが、もちろん機能していません。タブバーを完全に使用しましたが、単一のビュー(テーブルビュー)からは正常に機能します。この場合、self.navigationControllerに値があります。
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// With Tab Bars
self.tabBarController = [[UITabBarController alloc] init];
ViewController *vc1 = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
vc1.tabBarItem.title = @"Words";
vc1.tabBarItem.image = [UIImage imageNamed:@"tab_feed.png"];
TextTableViewController *vc2 = [[TextTableViewController alloc] init];
vc2.tabBarItem.title = @"Text";
vc2.tabBarItem.image = [UIImage imageNamed:@"tab_live.png"];
UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:vc1];
NSArray* controllers = [NSArray arrayWithObjects:vc2, navController, nil];
tabBarController.viewControllers = controllers;
tabBarController.delegate = self;
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
window.rootViewController = self.tabBarController;
[window makeKeyAndVisible];
return YES;
}
TextTableViewController.mから
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
TextViewController *detailViewController = [[TextViewController alloc] initWithNibName:@"TextViewController" bundle:nil];
Text *text = [[Text alloc] init];
text = [textArray objectAtIndex:indexPath.row];
detailViewController.TextID = text.textID;
NSLog(@"Nav Controller: %@",self.navigationController);
[self.navigationController pushViewController:detailViewController animated:YES];
NSLog(@"pushed");
}
この問題に関連する2つの質問もあります。(1)この行の目的は何ですか。それが入っていても出ていても違いはないようで、Appleの例にはありません。
tabBarController.delegate = self;
(2)タブの配列を作成する場合、ビューの1つがnavigationControllerになります。それがどのタブであるかは重要ですか、それともこれはどのタブにも関連せず、表示されない別のビューである必要があります。ここに問題がありますか?