我已经很好地查看了 Apple 文档以及类似的 Stack Overflow 问题,但我不知道为什么我的 navigationController 在使用标签栏时为空。我正在尝试从代码构建大部分应用程序,而不是使用 XIB 来插入导航控制器。
在调试时,我大大简化了我的应用程序,只剩下两个选项卡。一个选项卡包含一个表格视图,当触摸一行时,我期望出现一个详细信息页面(来自 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");
}
我还有两个与此问题相关的问题。(1) 这条线的目的是什么。无论是进还是出,它似乎都没有什么区别,并且在 Apple 示例中不存在。
tabBarController.delegate = self;
(2) 当创建一个选项卡数组时,其中一个视图是navigationController。它是哪个选项卡是否重要,或者这应该是一个完全与任何选项卡无关且不可见的不同视图。这是问题所在吗?