2014-02-14 89 views
1

我需要在iOS应用中创建导航,如下面的截图所示。带侧面菜单的iOS导航

enter image description here

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

问题是正确的导航菜单按钮,应该在所有选项卡中可见。即使是每个标签的所有内屏。

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

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

我应该如何设计它?

我到目前为止尝试过。

  1. 在每个选项卡中,有一个containerViewController。其中包括我的FrontViewControllerSideMenuViewController
  2. 当从侧面菜单中选择一个选项时,会将消息传递给containerViewController,该消息从视图中删除旧的FrontViewController并添加新的OptionViewController
  3. 菜单按钮和导航栏被添加到containerViewController,这样,如果应该每次在任何屏幕上都可见。

问题

现面向使用这种方法的一些问题。

  1. 随着导航栏被添加到containerViewController。我可以使用我的FrontViewControllerparent财产访问它。假设如果我需要在我的FrontViewController中使用PushViewController,我必须使用parent属性。像这样

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

  2. 我必须使用每个选项卡中的这种方法。手段代码重复5次。

任何人都可以提出一个简单的解决方案。任何帮助表示赞赏。

回答

2

我会考虑子类化UINavigationController并在那里添加按钮管理逻辑。当任何视图控制器被推入导航控制器时,设置其条形按钮项目。

侧面菜单不应位于每个选项卡内。您的根视图控制器应该真正控制主视图和侧视图,并且主视图具有您的选项卡控制器,其中有一个导航控制器作为每个选项卡的根。

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

酒吧按钮动作只推送到根视图控制器,当创建导航控制器时可以设置对其的引用。选项选择将遍历根VC - >主(选项卡)VC - >选择选项卡导航控制器 - >推。

+0

感谢您的回复。我必须尝试这个并在这里更新。 – Khawar

-1

对于iOS侧的菜单,如APMultiMenu,使用cocoapod可能更容易。我已经使用它,它使用简单,并遵循

+0

请不要给只有链接的答案。链接可以随时中断 –

3

您可以尝试使用InteractiveSideMenu为您的目的。它支持交互式打开/关闭菜单和以下的定制:

  • 动画的持续时间
  • 可见内容宽度
  • 内容规模
  • 使用弹簧动画使用参数定制像动画曲线
  • 动画选项

你应该使用3个基本的ViewControllers来创建子类来实现你的s ide菜单。

  • 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 
    } 
}