如何为导航控制器始终提供的iOS创建隐藏的滑动菜单视图

时间:2013-02-26 17:22:57

标签: ios objective-c cocoa-touch uinavigationcontroller

我知道这个主题已经有所涉及,但我没有看到我需要发布的内容。如果我错过了,请道歉。基本上我想要一些非常类似于Facebook滑出式导航菜单的东西。我看过这里指出使用ViewDeck的帖子,但出于各种原因我想自己推出。我的应用程序基于导航控制器,我计划在导航栏上设置一个按钮,切换菜单视图的可见性。

我的问题不在于如何创建和管理这样的视图,更具体地说,我怎样才能为这个视图创建一个视图控制器,并且无论目前哪个视图控制器都存在,它始终存在并可用我的导航控制器的堆栈?我正在使用故事板,我的第一个想法是将容器视图添加到我的主导航控制器并在那里添加菜单视图,但是我怀疑,故事板编辑器不允许我直接向导航控制器添加任何视图。我知道这是有道理的,没有必要向我解释为什么我无法做到这一点,包括这更多来表明我的意思,我想做这样的事情 - 在最顶级的全球范围内创建它所以它总是无需我的应用程序中的每个视图控制器创建。

我希望我的问题很明确。为了以防万一,让我说明一下我的想法 - 如果我向我的初始根视图控制器添加了一个容器视图,我管理隐藏并从侧面滑出,一旦我从我的根视图控制器导航离开我的新视图控制器导航堆栈,此菜单视图将不再存在。当然,我不希望随后为我的应用程序中的每个不同视图控制器创建它。

任何建议或帮助都非常感激。

4 个答案:

答案 0 :(得分:2)

好吧,我不确定我的建议与你正在寻找和提到的完全相同。但是让我试试吧为你画一幅视觉素描。

  1. 创建一个菜单视图作为UIViewController并根据需要设置设计。
  2. 实施设计&使用Hide& amp;和相同视图的菜单架构的逻辑显示将对各个代表做出反应的方法。 现在,您的菜单视图已准备好作为普通视图,通常我们可以推送和弹出以进行导航。现在,主要节目开始了。
  3. 由于你的应用程序有一个UINavigationController,它将有一个包含UIButton的自定义工具栏来欢迎菜单视图。
  4. 现在,将创建一个单例菜单视图实例来管理整个应用程序的常用菜单操作,最重要的是它将添加到UIWindow上。
  5. 此单例菜单视图实例将根据自定义工具栏按钮的要求请求显示/隐藏。
  6. 根据显示/隐藏的请求,应用具有预期逻辑的相应动画。
  7. 在请求隐藏时,菜单视图将从UIWindow中删除,下次需要在UIWindow上再次添加时。
  8. 希望,这可能对你有用。如果有任何误解,请告诉我。

答案 1 :(得分:1)

您可以使用一些开源控件,如JASidePanels(here)。

答案 2 :(得分:1)

我实际上刚刚完成了一个完全符合您想要的项目。

这是我采取的步骤。

  • 制作了一个视图控制器
  • 左侧添加了菜单导航
  • 在菜单导航上添加UIView
  • 添加了IBActions左右滑动动画,如...

    [UIView animateWithDuration:.25f delay:0.0 options:0
                 animations:^{
                     [mainView setFrame:CGRectMake(0, mainView.frame.origin.y, mainView.frame.size.width, mainView.frame.size.height)];
    
                 }
                 completion:^(BOOL finished){
    }];
    
  • 在同一个视图控制器中添加了其他视图

因此,您的一个主视图控制器几乎可以保存您的所有视图,只需使用按钮或UIGestureRecognizers左右滑动它们即可。您可以使用容器视图在子视图控制器中嵌套子视图控制器,以使代码端更易于管理。

答案 3 :(得分:-2)

感谢您的建议。我不想使用第三方库,部分原因是我不想拥有完全相同的行为。例如,我希望菜单显示在内容视图上,而不是将主视图推开的侧边菜单。我还希望它出现在导航栏下方。另外,我没有使用正确的菜单,因此我可以使用更轻的代码来处理我需要的内容。

我想我已经找到了解决方案。我创建了一个菜单视图控制器,并在我的应用程序委托中添加了对此的引用。现在,无论用户在哪里,当他或她单击菜单按钮时,它会调用应用程序委托上的方法来隐藏或显示菜单。因此,app delegate处理动画并添加&删除菜单作为当前显示的视图控制器的子视图。