Xcode 6 - Swift - 带导航的自定义标签栏

时间:2015-03-25 19:10:38

标签: ios xcode swift

我正在尝试使用Swift / XCode 6.2在标签栏中创建带有导航元素的选项卡式应用程序,如下图(红色条)所示。基本上,中间的这三个图标将引导用户到不同的视图控制器。其他两个图标将基于上下文。例如,在表格视图页面上,您将看到菜单图标并添加新图标,如图所示。但是,单击一行会将菜单图标更改为后退图标,将添加图标更改为其他内容。

这是一般的想法,但我很难实现甚至接近这个的东西。第一个问题是每当我在一个标签栏控制器中嵌入一个视图时,我都无法将标签栏移动到顶部。但是,当我在视图控制器中创建自定义UITabView时,按住Control并单击并将标签栏项目拖动到另一个视图不会创建segue。我甚至没有开始解决在栏内导航元素的问题。

我想我要问的只是为了解决这个问题的路线。我假设我不能使用标签栏控制器或导航控制器,因为它似乎我不能自定义它们。那么自定义标签栏和导航栏,然后以编程方式实现segue和按钮更改?

感谢。

Tab Bar with Navigation

2 个答案:

答案 0 :(得分:12)

我将尝试从架构角度引导您(因此您将在下面找不到太多代码)。

使用UITabBarController

为了达到你的建议,你是对的你不能直接使用UITabBarController ,在几个原因中,最直接的一个是它们意味着< strong>总是在底部,你想要它在顶部(检查Apple's docs)。好消息是,你可能不需要它!

注意:如果您因任何原因仍想使用UITabBarController,请参阅@ Matt的answer

使用UINavigationController

您可以使用UINavigationController来解决此任务,因为UINavigationBar的{​​{1}}可以自定义。有多种方法可以组织视图的层次结构来实现您的建议,但让我详细说明一个选项:

  1. 要自定义UINavigationController以添加按钮,您只需要设置其UINavigationBar的标题视图

    navigationItem
  2. 要在// Assuming viewWithTopButtons is a view containing the 3 top buttons self.navigationItem.titleView = viewWithTopButtons 上添加 汉堡菜单功能,您可以找到关于如何操作的several posts它和你可以使用的无限框架。请查看其他SO Question以获取更详细的答案(例如MMDrawerControllerECSlidingViewController提及一对夫妇。)

  3. 关于组织视图层次结构,它实际上取决于当用户点击其中一个主要顶部按钮时,它将始终转到新部分中的第一个视图控制器,或者是否要将其带回他所在部分的最后一个观点。

    3.1切换部分显示新部分的第一个视图

    您的应用UINavigationController将在层次结构的顶部有一个UIWindow。然后点击3个顶部按钮中的每一个将更改UINavigationController的根视图控制器。

    然后,当用户更改部分时,通过将新的部分视图控制器设置为UINavigationController根视图控制器,当前导航层次结构将被丢弃

    UINavigationController

    3.2切换部分显示新部分中最后显示的视图

    这需要稍微修改上述版本,您的每个部分都有自己的self.navigationController = [sectionFirstViewController] ,因此您始终可以为每个部分保留导航层次结构。

    然后,当用户点击其中一个顶部按钮切换部分,而不是如前所述进行更改时,您将UINavigationController根视图控制器更改为新部分的UIWindow

    UINavigationController
  4. 使用自定义实现

    当然,最后也是非常有效的选择是您自己实现自己的组件以满足您的要求。这可能是需要付出最大努力以换取最高可定制性的选项。

    对于缺乏经验的开发人员,绝对不建议选择此选项。

答案 1 :(得分:3)

我想对此嗤之以鼻 - 我认为可以在这里使用标签栏控制器。

  • 您的最顶层视图控制器将是隐藏UITabBarController的{​​{1}}。
  • 每个标签都包含在UITabBar
  • 导航控制器中的所有视图控制器都是视图控制器的子类(例如,UINavigationController)。
  • SwitchableViewController&#39; SwitchableViewController中,您可以设置导航项的标题视图(即中心的任何内容; viewDidLoad)包含三个中心按钮的视图。可以是self.navigationItem.titleView,也可以是自定义视图。
  • 每当您点按任何按钮时,都会将最顶层的UISegmentedControl所选索引更改为您要显示的视图控制器。

您可能遇到的问题:

  • 即使隐藏了标签栏,标签内的表格视图底部也会显示UITabBarController
  • 每次在导航堆栈中推送新的视图控制器时,您的标题视图都会生成动画。
    • 解决方案:看一下为UINavigationController创建自定义过渡动画。