gpt4 book ai didi

ios - 以 UITabBarController 作为 root 初始化 UINavigationController

转载 作者:行者123 更新时间:2023-12-01 18:47:30 27 4
gpt4 key购买 nike

我有一个根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.



所以我想知道:
  • 为什么我们有这样的限制?
  • ...为什么它起作用并且不抛出任何异常?这种方法有副作用吗?我正在尝试在我的标签栏 Controller 的所有标签中重用单个导航 Controller ,到目前为止,上面的代码运行良好。

  • 我需要的是 1)在我的所有选项卡中都有一个一致的导航栏(但具有不同的标题和左/右图标 2)某些选项卡必须支持向下钻取导航 3)切换到时我不需要选项卡栏面板屏幕层次结构的更深层次的元素。

    编辑

    我刚刚意识到 Skype for iOS 是我努力实现的一个很好的例子:它在标签和导航方面与我的应用程序完全一样。

    最佳答案

    我想原因是如果您将另一个 View Controller 推送到导航堆栈上,它会将标签栏 Controller 推送到标准动画的一侧,从而导致潜在的困惑用户体验。

    当您使用标签栏切换到不同的 Controller 时,您会将下一个 View Controller 推到不同的 Controller 之上,至少从用户的角度来看 - 这可能非常令人困惑。

    选项卡栏确实应该一直存在,因此将其嵌入到另一个 Controller Controller 中没有多大意义。如有必要,您可以隐藏特定屏幕的底部栏。

    最终它只是 Controller 的 Controller 这一事实也是它起作用的原因。 Controller 的 Controller 不知道它控制什么样的 Controller 。

    如果您描述了您的确切用例,您可以获得更具体的建议,无论这是否适合您的情况。也许您可能想考虑使用 UIToolbar反而。

    关于ios - 以 UITabBarController 作为 root 初始化 UINavigationController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34257373/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com