【问题标题】:iOS Navigation with side menu带有侧边菜单的 iOS 导航
【发布时间】:2014-03-13 19:14:48
【问题描述】:

我需要在 iOS 应用中创建一个导航,如下图所示。

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

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

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

现在每个选项卡都应该可以从每个选项中访问,并且每个选项菜单应该可以在每个选项卡中访问。它就像 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 次。

谁能提出一个简单的解决方案。任何帮助表示赞赏。

【问题讨论】:

    标签: ios iphone objective-c ipad uinavigationcontroller


    【解决方案1】:

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

    • 动画持续时间
    • 可见内容宽度
    • 内容规模
    • 使用带有参数自定义的弹簧动画
    • 动画曲线等动画选项

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

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

    【讨论】:

      【解决方案2】:

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

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

      现在导航栏不需要由不同的容器控制器管理,事情变得更容易了。

      条形按钮操作仅向上推到根视图控制器,可以在创建导航控制器时设置对它的引用。选项选择将遍历 root VC -> main (tab) VC -> selected tab nav controller -> push。

      【讨论】:

        【解决方案3】:

        将 cocoapod 用于 iOS 侧边菜单可能会更容易,例如 APMultiMenu。我用过,简单好用,跟着就走

        【讨论】:

        • 请不要给出仅链接的答案。链接随时可能中断
        猜你喜欢
        • 1970-01-01
        • 2014-07-03
        • 2015-06-09
        • 2017-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多