带侧边菜单的iOS导航

时间:2014-02-14 12:14:59

标签: ios iphone objective-c ipad uinavigationcontroller

我需要在iOS应用中创建导航,如下面的屏幕截图。

enter image description here

它包含一个标签栏和一个侧面菜单。

问题是右侧导航菜单按钮,应该在所有选项卡中都可见。甚至每个标签的所有内部屏幕。

当用户从侧面菜单中选择一个选项时,它应该显示在屏幕上。

现在应该可以从每个选项中访问每个选项卡,并且每个选项卡中都应该可以访问每个选项菜单。它就像DB中的多对多关系。

我该如何设计?

到目前为止,我试过了。

  1. 在每个标签中,有一个containerViewController。其中包括FrontViewControllerSideMenuViewController
  2. 当从侧边菜单中选择一个选项时,会向containerViewController传递一条消息,从视图中删除旧的FrontViewController并添加新的OptionViewController
  3. 菜单按钮和导航栏已添加到containerViewController中,因此每次都可以在任何屏幕上显示。
  4. 问题

    现在使用这种方法遇到一些问题。

    1. 导航栏已添加到containerViewController中。我可以使用parent的{​​{1}}属性访问它。假设我需要在FrontViewController中使用PushViewController,我必须使用FrontViewController属性。喜欢这个

      parent [self.parent.navigationController pushViewController:newVC animated:YES ];

    2. 我必须在每个标签中使用此方法。手段代码重复5次。

    3. 有人可以建议一个简单的解决方案。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:3)

您可以尝试将InteractiveSideMenu用于您的目的。它支持交互式打开/关闭菜单和以下自定义:

  • 动画片段
  • 可见内容宽度
  • 内容比例
  • 使用带有参数自定义的弹簧动画
  • 动画曲线等动画选项

您应该使用3个基本ViewControllers来创建子类来实现侧边菜单。

  • MenuContainerViewController是菜单和内容视图的主机
  • MenuViewController是菜单视图的容器
  • MenuItemContentControlller是与菜单项
  • 对应的内容的容器

以下是设置主机控制器的示例。

import InteractiveSideMenu

class HostViewController: MenuContainerViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.menuViewController = self.storyboard!.instantiateViewController(withIdentifier: "NavigationMenu") as! MenuViewController

        self.contentViewControllers = contentControllers()

        self.selectContentViewController(contentViewControllers.first!)
    }

    private func contentControllers() -> [MenuItemContentViewController] {
        //here is instantiation of content view controllers
    }
}

答案 1 :(得分:2)

我会考虑继承UINavigationController并在那里添加按钮管理逻辑。将任何视图控制器推入导航控制器时,请设置其按钮项目。

侧边菜单不应位于每个标签内。你的根视图控制器应该真正控制主视图和侧视图,主视图有你的标签控制器,它有一个导航控制器作为每个标签的根目录。

既然导航栏不需要由不同的容器控制器管理,事情就变得容易了。

栏按钮操作仅推送到根视图控制器,可以在创建导航控制器时设置对它的引用。选项选择将遍历根VC - > main(tab)VC - >选定的选项卡导航控制器 - >推。

答案 2 :(得分:-1)

对于诸如APMultiMenu之类的iOS侧菜单,可以更容易地使用cocoapod。我已经使用过它,使用起来很简单,并按照

进行操作