以 UITabBarController 为根初始化 UINavigationController
Init UINavigationController with UITabBarController as root
我有一个根 UINavigationController
并想用 UITabBarController
的实例初始化它,像这样:
TabBarController * viewController = [[TabBarController alloc] init];
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
根据 initWithRootViewController:
方法的文档,这是个坏主意:
The view controller that resides at the bottom of the navigation
stack. This object cannot be an instance of the UITabBarController
class.
所以我想知道:
- 为什么我们有这样的限制?
- ...为什么它可以工作并且不抛出任何异常?这种方法有副作用吗?我正在尝试在我的选项卡栏控制器的所有选项卡中重复使用单个导航控制器,到目前为止,上面的代码运行良好。
我需要的是 1) 在我的所有选项卡中有一个一致的导航栏(但具有不同的标题和 left/right 图标 2)一些选项卡必须支持 drill-down 导航 3)我不切换到屏幕层次结构的更深层元素时不需要标签栏面板。
编辑
我刚刚意识到 iOS 的 Skype 是我正在努力实现的一个很好的例子:它在选项卡和导航方面与我的应用程序完全一样。
我想原因是如果你将另一个视图控制器推到导航堆栈上,它会在标准动画中将选项卡栏控制器推到一边,从而导致潜在的混乱用户体验。
当您使用选项卡栏切换到不同的控制器时,您会将下一个视图控制器推到不同的控制器之上,至少从用户的角度来看 - 这可能非常令人困惑。
标签栏本来就是要一直存在的,所以将它嵌入到另一个控制器的控制器中没有多大意义。如有必要,您可以隐藏特定屏幕的底部栏。
最终它只是控制器的控制器这一事实也是它起作用的原因。控制器的控制器不知道它控制的控制器是什么种类。
如果您描述了您的确切用例,那么无论这对您的情况是否是个好主意,您都可以获得更具体的建议。也许您可能想考虑改用 UIToolbar
。
我有一个根 UINavigationController
并想用 UITabBarController
的实例初始化它,像这样:
TabBarController * viewController = [[TabBarController alloc] init];
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
根据 initWithRootViewController:
方法的文档,这是个坏主意:
The view controller that resides at the bottom of the navigation stack. This object cannot be an instance of the UITabBarController class.
所以我想知道:
- 为什么我们有这样的限制?
- ...为什么它可以工作并且不抛出任何异常?这种方法有副作用吗?我正在尝试在我的选项卡栏控制器的所有选项卡中重复使用单个导航控制器,到目前为止,上面的代码运行良好。
我需要的是 1) 在我的所有选项卡中有一个一致的导航栏(但具有不同的标题和 left/right 图标 2)一些选项卡必须支持 drill-down 导航 3)我不切换到屏幕层次结构的更深层元素时不需要标签栏面板。
编辑
我刚刚意识到 iOS 的 Skype 是我正在努力实现的一个很好的例子:它在选项卡和导航方面与我的应用程序完全一样。
我想原因是如果你将另一个视图控制器推到导航堆栈上,它会在标准动画中将选项卡栏控制器推到一边,从而导致潜在的混乱用户体验。
当您使用选项卡栏切换到不同的控制器时,您会将下一个视图控制器推到不同的控制器之上,至少从用户的角度来看 - 这可能非常令人困惑。
标签栏本来就是要一直存在的,所以将它嵌入到另一个控制器的控制器中没有多大意义。如有必要,您可以隐藏特定屏幕的底部栏。
最终它只是控制器的控制器这一事实也是它起作用的原因。控制器的控制器不知道它控制的控制器是什么种类。
如果您描述了您的确切用例,那么无论这对您的情况是否是个好主意,您都可以获得更具体的建议。也许您可能想考虑改用 UIToolbar
。