这是一般的想法,但我很难实现甚至接近这个的东西.第一个问题是每当我在一个标签栏控制器中嵌入一个视图时,我都无法将标签栏移动到顶部.但是,当我在视图控制器中创建自定义UITabView时,控制单击并将选项卡栏项拖动到另一个视图不会创建segue.我甚至没有开始解决在栏内导航元素的问题.
我想我要问的只是为了解决这个问题的路线.我假设我不能使用标签栏控制器或导航控制器,因为我似乎不能自定义它们.那么自定义标签栏和导航栏,然后以编程方式实现segue和按钮更改?
谢谢.
解决方法
使用UITabBarController
为了达到你的建议,你是对的,你不能马上使用UITabBarController,有几个原因,最直接的一个是它们总是在底部,你想要它在顶部(检查Apple’s docs).好消息是,你可能不需要它!
注意:如果您仍想使用UITabBarController,无论出于何种原因,请参阅@ Matt的answer.
使用UINavigationController
您可以使用UINavigationController来解决此任务,因为可以自定义UINavigationController的UINavigationBar.有多种方法可以组织视图的层次结构来实现您的建议,但让我详细说明一个选项:
>要自定义UINavigationBar以添加按钮,您只需设置其navigationItem的标题视图:
// Assuming viewWithTopButtons is a view containing the 3 top buttons self.navigationItem.titleView = viewWithTopButtons
>要在UINavigationController上添加汉堡菜单功能,您可以找到关于如何操作的several posts以及您可以使用的无限框架.请查看其他SO Question以获取更详细的答案(例如MMDrawerController,ECSlidingViewController,提及一对夫妇).
>关于组织视图层次结构,它实际上取决于当用户点击其中一个主要顶部按钮时,它将始终转到新部分中的第一个视图控制器,或者是否要将他带回到最后一个视图中.他所在的部分.
3.1切换部分显示新部分的第一个视图
您的应用程序的UIWindow将在层次结构之上具有单个UINavigationController.然后,在点击时,3个顶部按钮中的每一个都将更改UINavigationController的根视图控制器.
然后,当用户更改部分时,通过将新的部分视图控制器设置为UINavigationController根视图控制器来丢弃当前导航层次结构.
self.navigationController = [sectionFirstViewController]
这将需要上面稍微修改过的版本,其中您的每个部分都有自己的UINavigationController,因此您可以始终保持每个部分的导航层次结构.
然后,当用户点击其中一个顶部按钮切换部分,而不是如前所述进行更改时,您将UIWindowroot视图控制器更改为新部分的UINavigationController.
window.rootViewController = sectionNavigationController
使用自定义实现
当然,最后也是非常有效的选择是您自己实现自己的组件以满足您的要求.这可能是需要付出最大努力以换取最高可定制性的选项.
对于经验不足的开发人员,绝对不建议选择此选项.