【问题标题】:how to reuse the bar button for the slide menu on every controller view如何在每个控制器视图上重用滑动菜单的栏按钮
【发布时间】:2018-01-20 08:48:13
【问题描述】:

我已经构建了一个运行良好的幻灯片菜单。每个按钮都指向一个新的视图控制器。与其点击子视图控制器的后退按钮返回主视图控制器切换到下一个功能,我希望每个视图控制器都有相同的滑动菜单。

我想在下图中将“

我已阅读Sliding Menu on every view controller in swift,但仍不清楚。我是 xcode/ios 的新手。

我找不到一些关于如何做到这一点的好文档。我在哪里可以找到我想做的 doc、tuto?

【问题讨论】:

    标签: ios side-menu


    【解决方案1】:

    第 1 步

    创建一个名为 "BaseMenuController" 的类,继承子类 UIViewController

    第 2 步

    在 BaseMenuController 中,粘贴以下代码。

    import UIKit
    
    class BaseMenuController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            addMenuBarButtonItem()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        func addMenuBarButtonItem() {
            let image = UIImage(named: "side_menuImage")
            let backItem = UIBarButtonItem(image: image,
                                           style: .plain,
                                           target: self,
                                           action: #selector(showSideMenu))
    
            self.navigationItem.leftBarButtonItem = backItem
    
        }
    
        @objc func showSideMenu(){
        if (UIApplication.shared.userInterfaceLayoutDirection == .leftToRight)       {
            self.sideMenuViewController.presentLeftMenuViewController()
        }else{
            self.sideMenuViewController.presentRightMenuViewController()
        }
    
       }
    }
    

    第 3 步

    现在你的控制器类已经准备好了。您只需要在创建新的 Controller 类时继承 BaseMenuController。将 BaseMenuController 类作为子类。

    import UIKit
    
    class UIViewController:BaseMenuController  {
    
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }
    

    【讨论】:

    • 请原谅我的愚蠢问题!现在我的滑动菜单中有一个按钮,它连接到视图控制器以“显示”视图控制器。这段代码去哪儿了?在我的基本控制器的 viewcontroller.swift 中?当我单击菜单按钮时,调用什么函数?在显示机制之上,我想我需要将按钮与动作功能连接起来?关于我需要先阅读的文档,您会推荐什么?感谢您的耐心等待!
    • @narb 你不需要任何按钮或创建插座。你只需要推动 Viewcontroller。 SideMenu 按钮出现。您只需使用 BaseMenuController 继承类。
    • 那么当我点击按钮(在滑动菜单中)时,调用了什么方法?
    • 当你用 BaseMenuController 继承你的控制器类时。您已经看到出现了菜单按钮,并且当您单击侧菜单按钮时会调用 showSideMenu()。
    • 这里是它的用法。 let navigationController = UINavigationController() let sideMenu = SideMenuViewController(nibName: "SideMenuViewController", bundle: nil) let homePage = HomePageViewControllerNew(nibName: "HomePageViewControllerNew", bundle: nil) if(openShelf){ homePage.segementindex = 1 homePage.isOpenMySHelf = true } navigationController.viewControllers = [主页]
    【解决方案2】:

    您可以在 BaseViewController 类中添加 SideMenu 按钮。

    func addMenuButtonToNavigationBar(){
        self.leftSearchBarButtonItem =  UIBarButtonItem(image: UIImage.init(named: "side_menu"), style: UIBarButtonItemStyle.plain, target: self, action: #selector(showSideMenu))
        self.navigationItem.leftBarButtonItem = self.leftSearchBarButtonItem;
    }
    @objc func showSideMenu(){
        if (UIApplication.shared.userInterfaceLayoutDirection == .leftToRight) {
            self.sideMenuViewController.presentLeftMenuViewController()
        }else{
            self.sideMenuViewController.presentRightMenuViewController()
        }
    }
    

    并且在每个视图控制器的 viewwillappear() 方法中,像这样调用上面的方法 self.addMenuButtonToNavigationBar()

    我正在使用 pod for sidemen。 https://github.com/romaonthego/RESideMenu

    【讨论】:

    • 很有趣,但我更喜欢快速的方法,那是很多 C 代码。此外,我想了解机制而不是复制代码。
    • 好吧,让我试着理解你。你必须创建一个 baseViewController。并将方法名称 addSideMenuButton 添加到 NavigationBar 之后,应用程序中的每个视图控制器都应该从 BaseViewController 继承。那么你就可以访问这个方法了。
    • 我想这就是我想做的。我正在移植一个 android 应用程序,所以我是 xcode 的新手。我有一个导航控制器和一个主视图控制器,我在其中定义了滑动菜单。滑动菜单的每个按钮都指向一个新的控制器视图。当我在功能 A 中并且我想转到功能 B 时,我需要单击返回并再次单击功能 B。我希望在每个视图控制器上都有一个指向相同滑动菜单的条形按钮.
    • 是的,我见过。相当不错。但它在 objc 中......我没有带 C 的 pb,但我是 swift+xcode 的初学者。说服我! :)
    • RESideMenuStoryboards 和 RESideMenuExample 是 100% objC。我在你的网址后面得到它!?我看错网址了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2013-07-15
    相关资源
    最近更新 更多