Adding a Navigation Bar to the Home Screen of the Firebase Authentication Tutorial 2020 - Custom iOS Login Page (Swift)

Hi All,

Does anyone have any advice/guidance on how to code the navigation bar back into the project at the end so that it appears in the Home screen? I’d like to link it so that I can add a side menu… or is there a tutorial video you can point me in the direction of

NB: I already understand how to build a side menu from scratch, just having difficulty getting it to read from this excellent tutorial.

Thanks for any help anyone can provide
J2K

If you want the button to be on the left then add the following in viewDidLoad():

let menuButton = UIBarButtonItem(title: "Menu", style: .plain, target: self , action: #selector (menuTapped))
navigationItem.leftBarButtonItems = [menutButton]

If you want the button to be on the right then change leftBarButtonItems to rightBarButtonItems.

Create the following function:

@objc func menuTapped() {
        // Add your menu code here
 }

Hi Chris,

Thanks for responding, I’m still relatively new to all this, the full code I originally had written in my HomeViewController was as follows:

import UIKit
import SideMenu

class HomeViewController: UIViewController, MenuControllerDelegate {
private var sideMenu: SideMenuNavigationController?

private let searchController = SearchViewController()
private let profileController = ProfileViewController()
private let settingsController = SettingsViewController()
private let messagesController = MessagesViewController()
private let contactusController = ContactUsViewController()

override func viewDidLoad() {
    super.viewDidLoad()
    let menu = MenuController(with: SideMenuItem.allCases)
    
    sideMenu = SideMenuNavigationController(rootViewController: menu)
    sideMenu?.leftSide = true
    sideMenu?.setNavigationBarHidden(true, animated: false)
    
    SideMenuManager.default.leftMenuNavigationController = sideMenu
    SideMenuManager.default.addPanGestureToPresent(toView: view)
    
    addChildControllers()
    
}

private func addChildControllers() {
    addChild(searchController)
    addChild(profileController)
    addChild(settingsController)
    addChild(messagesController)
    addChild(contactusController)
    
    view.addSubview(searchController.view)
    view.addSubview(profileController.view)
    view.addSubview(settingsController.view)
    view.addSubview(messagesController.view)
    view.addSubview(contactusController.view)
    
    searchController.view.frame = view.bounds
    profileController.view.frame = view.bounds
    settingsController.view.frame = view.bounds
    messagesController.view.frame = view.bounds
    contactusController.view.frame = view.bounds
    
    searchController.didMove(toParent: self)
    profileController.didMove(toParent: self)
    settingsController.didMove(toParent: self)
    messagesController.didMove(toParent: self)
    contactusController.didMove(toParent: self)
    
    searchController.view.isHidden = true
    profileController.view.isHidden = true
    settingsController.view.isHidden = true
    messagesController.view.isHidden = true
    contactusController.view.isHidden = true
    
}

@IBAction func didTapMenuButton() {
    present(sideMenu!, animated: true)
}

func didSelectmenuItem(named: SideMenuItem) {
    sideMenu?.dismiss(animated: true, completion: nil)
    
    title = named.rawValue
    
    switch named {
    case .home:
        searchController.view.isHidden = true
        profileController.view.isHidden = true
        settingsController.view.isHidden = true
        messagesController.view.isHidden = true
        contactusController.view.isHidden = true
        
    case .search:
        searchController.view.isHidden = false
        profileController.view.isHidden = true
        settingsController.view.isHidden = true
        messagesController.view.isHidden = true
        contactusController.view.isHidden = true
        
    case .profile:
        searchController.view.isHidden = true
        profileController.view.isHidden = false
        settingsController.view.isHidden = true
        messagesController.view.isHidden = true
        contactusController.view.isHidden = true
        
    case .settings:
        searchController.view.isHidden = true
        profileController.view.isHidden = true
        settingsController.view.isHidden = false
        messagesController.view.isHidden = true
        contactusController.view.isHidden = true
        
    case .messages:
        searchController.view.isHidden = true
        profileController.view.isHidden = true
        settingsController.view.isHidden = true
        messagesController.view.isHidden = false
        contactusController.view.isHidden = true
        
    case .contactus:
        searchController.view.isHidden = true
        profileController.view.isHidden = true
        settingsController.view.isHidden = true
        messagesController.view.isHidden = true
        contactusController.view.isHidden = false
        
    }
    
}

}

I had also embedded an additional Navigation Controller and Tab Bar Controller to the home ViewController as shown below:

I rewrote the code as you suggested to look like this:

import UIKit
import SideMenu

class HomeViewController: UIViewController, MenuControllerDelegate {
private var sideMenu: SideMenuNavigationController?

private let searchController = SearchViewController()
private let profileController = ProfileViewController()
private let settingsController = SettingsViewController()
private let messagesController = MessagesViewController()
private let contactusController = ContactUsViewController()

override func viewDidLoad() {
    super.viewDidLoad()
    
    let menu = MenuController(with: SideMenuItem.allCases)
    
    // Additional/replacement code suggested by Chris Parker via CWC App Development Community
    let menuButton = UIBarButtonItem(title: "Menu", style: .plain, target: self , action: #selector (menuTapped))
    navigationItem.leftBarButtonItems = [menuButton]
    
    sideMenu = SideMenuNavigationController(rootViewController: menu)
    sideMenu?.leftSide = true
    sideMenu?.setNavigationBarHidden(true, animated: false)
    
    SideMenuManager.default.leftMenuNavigationController = sideMenu
    SideMenuManager.default.addPanGestureToPresent(toView: view)
    
    addChildControllers()
    
}

private func addChildControllers() {
    addChild(searchController)
    addChild(profileController)
    addChild(settingsController)
    addChild(messagesController)
    addChild(contactusController)
    
    view.addSubview(searchController.view)
    view.addSubview(profileController.view)
    view.addSubview(settingsController.view)
    view.addSubview(messagesController.view)
    view.addSubview(contactusController.view)
    
    searchController.view.frame = view.bounds
    profileController.view.frame = view.bounds
    settingsController.view.frame = view.bounds
    messagesController.view.frame = view.bounds
    contactusController.view.frame = view.bounds
    
    searchController.didMove(toParent: self)
    profileController.didMove(toParent: self)
    settingsController.didMove(toParent: self)
    messagesController.didMove(toParent: self)
    contactusController.didMove(toParent: self)
    
    searchController.view.isHidden = true
    profileController.view.isHidden = true
    settingsController.view.isHidden = true
    messagesController.view.isHidden = true
    contactusController.view.isHidden = true
    
}

// Additional/replacement code suggested by Chris Parker via CWC App Development Community
@objc func menuTapped() {
    present(sideMenu!, animated: true)
}

@IBAction func didTapMenuButton() {
    present(sideMenu!, animated: true)
}

func didSelectmenuItem(named: SideMenuItem) {
    sideMenu?.dismiss(animated: true, completion: nil)
    
    title = named.rawValue
    
    switch named {
    case .home:
        searchController.view.isHidden = true
        profileController.view.isHidden = true
        settingsController.view.isHidden = true
        messagesController.view.isHidden = true
        contactusController.view.isHidden = true
        
    case .search:
        searchController.view.isHidden = false
        profileController.view.isHidden = true
        settingsController.view.isHidden = true
        messagesController.view.isHidden = true
        contactusController.view.isHidden = true
        
    case .profile:
        searchController.view.isHidden = true
        profileController.view.isHidden = false
        settingsController.view.isHidden = true
        messagesController.view.isHidden = true
        contactusController.view.isHidden = true
        
    case .settings:
        searchController.view.isHidden = true
        profileController.view.isHidden = true
        settingsController.view.isHidden = false
        messagesController.view.isHidden = true
        contactusController.view.isHidden = true
        
    case .messages:
        searchController.view.isHidden = true
        profileController.view.isHidden = true
        settingsController.view.isHidden = true
        messagesController.view.isHidden = false
        contactusController.view.isHidden = true
        
    case .contactus:
        searchController.view.isHidden = true
        profileController.view.isHidden = true
        settingsController.view.isHidden = true
        messagesController.view.isHidden = true
        contactusController.view.isHidden = false
        
    }
    
}

}

I got no red flags and built/ran it with and without (removing) the Tab Bar and Navigation Controllers from the HomeViewController… but still no joy?