narb
narb

Reputation: 988

how to reuse the bar button for the slide menu on every controller view

I've built a slide menu that works fine. Each button leads to a new view controller. Rather than clicking on the back button of the subview view contoller to return to the main view controller to switch to the next function, I'd like from every view controller to have the same sliding menu.

I want in the image below to replace "< Test app" with my sliding menu icon pointing to the same menu as the main one.

enter image description here

I've read Sliding Menu on every view controller in swift but it's still unclear. I'm new to xcode/ios.

I can't find some good doc on how to do that. Where can I find doc, tuto for what I would like to do?

Upvotes: 0

Views: 1730

Answers (2)

Khawar Islam
Khawar Islam

Reputation: 2924

Step 1

Create a class with name "BaseMenuController" inherit with subclass UIViewController.

Step 2

In BaseMenuController, paste following code.

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()
    }

   }
}

Step 3

Now your Controller Class is ready. you only need to inherit BaseMenuController When you create a new Controller Class. Give BaseMenuController class as a subclass.

import UIKit

class UIViewController:BaseMenuController  {


    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

Upvotes: 2

Taimoor Suleman
Taimoor Suleman

Reputation: 1626

You can add SideMenu Button your BaseViewController class.

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()
    }
}

And in every view controller's viewwillappear() method call above method like this self.addMenuButtonToNavigationBar()

I am using pod for sidemen. https://github.com/romaonthego/RESideMenu

Upvotes: 1

Related Questions