【问题标题】:iOS Navigation & TabBarControllersiOS 导航和 TabBarControllers
【发布时间】:2013-07-05 07:40:25
【问题描述】:

我似乎还没有对 UITabBar、UITabBarController 和导航控制器有足够的了解来做我想做的事情。我希望有人可以提供一些指导。

我总共有 8 个 VC。我希望其中五个可以从第一个(启动)屏幕上的 TabBar 中选择,并且选择任何项目都会加载特定的 VC。一旦选择了 VC,它将加载,我需要将 8 个总选项中的大约 5 个作为潜在目的地。其他任何人都一样。

因此,给定的 VC 将需要其自己的 TabBar,并且可以在其上包含 8 个 VC 中的任何一个。本质上,我希望用户能够使用标签栏从一个 VC 切换到下一个 VC,而无需返回到根 VC。

我很清楚如何在启动屏幕上使用 tabbarcontroller 来加载我首先想要的视图。但鉴于加载的 VC 可能需要在 ITS 选项卡栏中选择不同的可能 VC,如何设置呢?

回顾一下,我有

ROOT VC 有以下选择

VC-A
VC-B
VC-C
VC-D
VC-D

如果您选择 VC-A,您将从 VC-A 中做出以下选择

VC-C
VC-D
VC-E
VC-F

如果您选择 VC-B,您将从 VC-B 中做出以下选择

VC-A
VC-C
VC-D
VC-E
VC-R

等等。

我希望所有这些选择都基于 UITabBar 或 UITabBarController。由于每个 VC 都可能需要大量内存,因此我还担心,例如,如果 VC-B 选择 V​​C-D,我可能会破坏 VC-B(或至少部分实现,以便在必要时重新加载) 以节省内存(根据需要重新实例化)。

已经很晚了。我希望我已经充分解释了我正在尝试做的事情。此外,不使用任何 NIB;一切都以编程方式编码。

提前感谢任何人提供的任何帮助。我愿意接受任何和所有建议。

【问题讨论】:

    标签: ios uinavigationcontroller uitabbarcontroller viewcontroller


    【解决方案1】:

    我认为最好的方法是使用单个 UITabBarController。用你的前 5 个 VC 初始化它并设置它的委托。你的UITabBarControllerDelegate 应该实现tabBarController:didSelectViewController:。在该委托方法中,根据选择的 VC 刷新 UITabBarController 中的 VC,以便仅显示与所选 VC 相关的 VC。

    另一方面,我强烈建议不要这样做。这样的导航结构对于用户来说似乎非常非常复杂。也许您可以通过简化结构来制作更好的应用程序。

    【讨论】:

    • 我最终使用了这种方法,并且效果很好。虽然,我坚持原来的导航设计,因为用户必须能够在不返回根 VC 的情况下即时交换 VC。但所有这些答案对我都有帮助。谢谢。
    【解决方案2】:

    试试这个

    UITabBarController *tabBar = [[UITabBarController alloc]init];
    UINavigationController*  nav1=[[UINavigationController alloc]init];
    UINavigationController*  nav2=[[UINavigationController alloc]init];
    UINavigationController*  nav3=[[UINavigationController alloc]init];
    
    FirstVC  *ObjFirstVC = [[FirstVC alloc] init];
    nav1.viewControllers=[NSArray arrayWithObjects:ObjFirstVC, nil];
    nav1.tabBarItem.title=@"First";
    
    SecondVC  *ObjSecondVC = [[SecondVC alloc] init];
    nav2.viewControllers=[NSArray arrayWithObjects:ObjSecondVC, nil];
    nav2.tabBarItem.title=@"Second";
    
    ThirdVC  *ObjThirdVC = [[ThirdVC alloc] init];
    nav3.viewControllers=[NSArray arrayWithObjects:ObjThirdVC, nil];
    nav3.tabBarItem.title=@"Third";
    
    tabBar.viewControllers=[NSArray arrayWithObjects:nav1,nav2,nav3,nil];
    

    【讨论】:

      【解决方案3】:

      你需要一个UITabBarController为每个标签设置一个UINavigationController(你可以在情节提要中很容易地做到这一点)作为root,为每个UINavigationController设置一个根视图控制器(当用户第一次点击该选项卡时要显示的第一个视图控制器)。

      完成上述建议后,您将拥有 5 个标签栏,其中 5 个 UINavigationControlles 带有根视图控制器,现在您可以为每个标签定义您喜欢的任何导航(推/弹出)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多