我在iTunes U中关注斯坦福大学的iPhone开发课程,我的任务中遇到了一个问题(狗仔队,如果有人熟悉的话)。
我要做的是基本上在应用程序启动时将此视图创建为第一个“屏幕”:
这是我在app delegate中的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// PersonListViewController is the 'content' of the screen (image, name, and button)
PersonListViewController* personList = [[PersonListViewController alloc] initWithNibName:@"PersonListViewController" bundle:[NSBundle mainBundle]];
navController = [[UINavigationController alloc] initWithRootViewController:personList];
[personList release];
UITabBarController* tabBarController = [[UITabBarController alloc] init];
[window addSubview:[tabBarController view]];
[window addSubview:[navController view]];
[window makeKeyAndVisible];
return YES;
}
但是这段代码似乎没有显示底部的tabBar,只显示导航栏和中间的视图(图像,名称和按钮)。
有人可以向我解释我做错了什么以及如何解决它?
答案 0 :(得分:3)
您通常做的是将主ViewController(在本例中为PersonListViewController
)嵌套在UINavigationController
中(就像您所做的那样),但是您将tabBarController.viewControllers
属性设置为等于一组视图控制器(每个选项卡一个)。
在您的情况下,这看起来像
tabBarController.viewControllers = [NSArray arrayWithObject:navController];
然后只将tabBarController的视图添加到窗口
[window addSubview:[tabBarController view];
这将为您提供导航控制器内部选项卡控制器内的列表(并且标签控制器目前只有一个选项卡)。
答案 1 :(得分:2)
您需要的是一个标签栏控制器包含导航控制器,每个标签一个,每个包含一个自定义VC。
有点像:(这是袖口和未经测试,所以注意错误)
PersonListViewController* plvc = [[[PersonListViewController alloc]
initWithNibName:@"PersonListViewController"
bundle:nil]
autorelease];
UINavigationController *uinc = [[[UINavigationController alloc]
initWithRootViewController:plvc]
autorelease];
// ... make more VCs for any other tab pages here
UITabBarController* tbc = [[[UITabBarController alloc] init] autorelease];
[tbc setViewControllers:[NSArray arrayWithObjects: uinc, nil]]; // *1
/* iOS 4 and later, preferred: */
[window setRootViewController:tbc];
/* or, alternatively, in iOS 3:
[window addSubview:[tbc view]];
[self setMyMainTabsController:tbc]; // must keep an owning reference or it'll get released
*/
[window makeKeyAndVisible];
在* 1,将其他选项卡的任何VC添加到列表中。
将导航控制器放在标签控制器内是完全合法的,Apple认可。将标签控制器放在导航控制器中不是,尽管它可能在有限的情况下有效。