PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Tuesday, November 8, 2022

[FIXED] How to enable SideMenu to work with ViewController functions | Swift/Xcode

 November 08, 2022     menu, swift, uitableview, uiviewcontroller, xcode     No comments   

Issue

I'm using a pod called "SideMenu" which creates a menu using a tableView. The menu is embedded in my ViewController, but it doesn't have access to the ViewController's functions. When I tap on a row in the menu, I want it to segue to the proper screen. Unfortunately, the segues originate from the ViewController and not the Menu. I obviously can't use a Delegate since I never segue to the tableView - it's embedded. How can I solve this issue?

class ViewController: UIViewController, UINavigationControllerDelegate {
    var menu: SideMenuNavigationController?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Setup the menu
        setupMenu()
    }

    func setupMenu() {
        menu = SideMenuNavigationController(rootViewController: MenuListController())
        menu?.setNavigationBarHidden(true, animated: false)
        menu?.presentationStyle = .menuDissolveIn
        SideMenuManager.default.rightMenuNavigationController = menu
        SideMenuManager.default.addPanGestureToPresent(toView: self.view)
    }

    func showProfile() {
        performSegue(withIdentifier: "profileSegue", sender: self)
    }
    
    
    func showHelp() {
        performSegue(withIdentifier: "helpSegue", sender: self)
    }
    
    
    func showSettings() {
        performSegue(withIdentifier: "settingsSegue", sender: self)
    }
    
    
    func showPreferences() {
        performSegue(withIdentifier: "preferencesSegue", sender: self)
    }

}

class MenuListController: UITableViewController {
    
    var items = ["Profile", "Help", "Settings", "Preferences", "Log Out"]
    var darkColor = UIColor(red: 33/255.0, green: 33/255.0, blue: 33/255.0, alpha: 1)
    
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = darkColor
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return items.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        var content = cell.defaultContentConfiguration()
        content.text = items[indexPath.row]
        content.textProperties.color = .white
        cell.contentConfiguration = content
        cell.backgroundColor = darkColor
        return cell
    }
    
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
        
        if indexPath.row == 0 {
            // Profile
        } else if indexPath.row == 1 {
            // Help
        } else if indexPath.row == 2 {
            // Settings
        } else if indexPath.row == 3 {
            // Preferences
        } else if indexPath.row == 4 {
            // Log Out
            logOut()
        }
        
    }
    
}

I couldn't find the answer in the GitHub documentation for the pod. Here is the link anyway: SideMenu


Solution

You can navigate like this also.

 func openSettings(){
        let storyBoard = UIStoryboard(name: "ReplaceStoryBoardName", bundle: nil)
        let childVc = storyBoard.instantiateViewController(withIdentifier: "ReplaceYourIdentifierFromStoryBoard") as? YourViewControllerName
childVc.anyData = self.Data // or whatever data you want to sent you can inject it here.

        self.navigationController?.pushViewController(childVc, animated: true)
    }

There are some others way like NotificationCenter You can post the notification from Sidemenu View Controller Then Observe it on your ViewController in which you have embeded the SideMenu



Answered By - Hammer Class
Answer Checked By - Clifford M. (PHPFixing Volunteer)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing