J2K
August 5, 2020, 7:09am
1
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
}
J2K
August 6, 2020, 2:36am
3
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?