我需要在iOS应用中创建导航,如下面的屏幕截图。
它包含一个标签栏和一个侧面菜单。
问题是右侧导航菜单按钮,应该在所有选项卡中都可见。甚至每个标签的所有内部屏幕。
当用户从侧面菜单中选择一个选项时,它应该显示在屏幕上。
现在应该可以从每个选项中访问每个选项卡,并且每个选项卡中都应该可以访问每个选项菜单。它就像DB中的多对多关系。
我该如何设计?
到目前为止,我试过了。
containerViewController
。其中包括FrontViewController
和SideMenuViewController
。containerViewController
传递一条消息,从视图中删除旧的FrontViewController
并添加新的OptionViewController
。containerViewController
中,因此每次都可以在任何屏幕上显示。问题
现在使用这种方法遇到一些问题。
导航栏已添加到containerViewController
中。我可以使用parent
的{{1}}属性访问它。假设我需要在FrontViewController
中使用PushViewController
,我必须使用FrontViewController
属性。喜欢这个
parent
[self.parent.navigationController pushViewController:newVC animated:YES ];
我必须在每个标签中使用此方法。手段代码重复5次。
有人可以建议一个简单的解决方案。任何帮助表示赞赏。
答案 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。我已经使用过它,使用起来很简单,并按照
进行操作