我以编程方式创建了一个视图控制器并将其设置为根控制器。一切都如预期的那样完美:
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
CustomViewController *vc = [[CustomViewController alloc] init];
[[self window] setRootViewController:vc];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
然后我添加了一个UITabBarViewController,将它的'viewControllers'属性设置为指向(一个数组)主viewController'vc'。
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
CustomViewController *vc = [[CustomViewController alloc] init];
UITabBarController *tbc = [[UITabBarController alloc] init];
NSArray *controllers = @[vc];
[tbc setViewControllers:controllers];
[[self window] setRootViewController:vc];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
并且视图在启动时停止显示在屏幕上,还有关于未设置根视图控制器的警告。添加字符串后,'vc'控制器的视图下方终于加载完成了,但是屏幕底部有一个空行,好像UIBarController修改了[[UIMainScreen bounds]。
[[self window] addSubview:vc.view];
我是iOS开发的新手,我有点困惑。似乎我不了解有关视图控制器层次结构的一些非常基本的东西,但是在阅读了 Apple 的“视图控制器编程指南”之后,我仍然不明白我错在哪里。
setRootViewController: 方法应该自动将参数视图控制器的 _view 分配为窗口的默认视图,但如果命名的视图控制器先前已经被 UITabBarViewController 的 viewControllers 属性指向,则不会发生这种情况。虽然我检查了调试器并发现在 setViewControllers: 方法被调用后 'vc' 对象没有改变。
您能否解释一下发生了什么或指向我应该阅读的文档?
更新:我不会将“vc”控制器插入“tbc”控制器。我想要的是全屏显示“vc”视图,因为它通常会显示没有关于“tbc”的代码。从我的角度来看,添加另一个视图(在我的情况下为 tbc)不应该影响这种行为。
当然,从实际的角度来看,这毫无用处,但我想知道引擎盖下发生了什么。