我hamburger menu
在我的 ios 应用程序中创建了一个。
我有一个navigationBar
在我rootViewController
,但现在我需要移动navigationBar
到我的一个childViewController
对于一些functions/buttons
工作。
现在,我已经搬到它变成childViewController
了navigationBar
不显示。如果我做childViewController
了rootController
的navigationBar
显示细腻,这是因为在我的appDelegate
我有rootController
作为navigationController
。
只有当我使之成为childViewController
该navigationBar
决定不显示。不知道我需要做什么才能让它工作。
这是我appDelegate
制作的地方rootViewController
:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
window?.rootViewController = UINavigationController(rootViewController: jobListController())
return true
}
这是我viewDidLoad
(rootViewController)
要添加的汉堡菜单childViewControllers
:
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.white
// ADD VIEWCONTROLLERS TO MENU
view.addSubview(sideBarUIView)
addChildViewController(sideBar)
view.addSubview(sideBar.view)
sideBar.view.center = sideBarUIView.center
addChildViewController(jobList)
view.addSubview(jobList.view)
jobList.view.center = overlayView.center
// ADD UI VIEWS TO HAMBURGER MENU
view.addSubview(overlayView)
overlayView.isHidden = true
}
这是childViewController
我想添加navigationBar
到的:
class jobListController: UIViewController {
super.viewDidLoad()
navigationController?.navigationBar.barTintColor = UIColor(red:1.00, green:1.00, blue:1.00, alpha:1.0)
navigationController?.view.backgroundColor = UIColor(red:1.00, green:1.00, blue:1.00, alpha:1.0)
navigationController?.navigationBar.shadowImage = UIImage()
navigationItem.title = "JOBS"
let searchButton = UIBarButtonItem(barButtonSystemItem: .search, target: self, action: #selector(HandleSearch))
let addNewJobButton = UIBarButtonItem(barButtonSystemItem: .compose, target: self, action: #selector(HandleNewJob))
searchButton.tintColor = UIColor(red:0.63, green:0.63, blue:0.63, alpha:1.0)
addNewJobButton.tintColor = UIColor(red:0.63, green:0.63, blue:0.63, alpha:1.0)
navigationItem.rightBarButtonItems = [addNewJobButton, searchButton]
}
}
编辑:
在使用 Lukáš Mareda 的答案似乎解决了我遇到的问题后,它产生了一个新问题。
在我的 rootController(汉堡菜单)上,我可以在屏幕上的任意位置滑动,它会打开汉堡菜单,这很棒,因为这是所需的效果。
我的 hamburgerMenu 中的一个子视图控制器有一个 tableView。如果我单击其中一个单元格并转到一个新的 viewController,仍然可以通过向右滑动来访问汉堡菜单。
我只想能够访问顶层的汉堡菜单,但现在我似乎可以在我的应用程序的任何地方访问它。
1) 汉堡菜单视图控制器应该是 UIViewController 的子类。在 appDelegate 中的第一步:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = HamburgerViewController()
window?.makeKeyAndVisible()
return true
}
2) HamburgerView 控制器应该将 NavigationController(或其子类)嵌入到一些 rootview 控制器中。所以在 HamburgerViewController
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.white
// ADD VIEWCONTROLLERS TO MENU
view.addSubview(sideBarUIView)
addChildViewController(sideBar)
view.addSubview(sideBar.view)
sideBar.view.center = sideBarUIView.center
let navigationController = UINavigationController(rootViewController: jobListController())
addChildViewController(navigationController)
view.addSubview(navigationController.view)
navigationController.view.center = overlayView.center
// ADD UI VIEWS TO HAMBURGER MENU
view.addSubview(overlayView)
overlayView.isHidden = true
}
3)JobList 可以保持原样。我假设在当前状态下,该navigationController
财产为零
更新答案
关于处理你的有两种想法 hamburgerGestureRecognizer
1)您可以将 hamburgerGestureRecognizer 添加到rootViewController
.view 中,JobList
这样手势识别器将仅在 rootViewController 中
let jobList = jobListController()
let navigationController = UINavigationController(rootViewController: jobList)
addChildViewController(navigationController)
view.addSubview(navigationController.view)
joblist.view.addGestureRecognizer(hamburgerGestureRecognizer)
navigationController.view.center = overlayView.center
在 hamburgerMenu 屏幕之间切换的地方,你可以重用这个识别器
viewControllerToPresent.view.addGestureRecognizer(hamburgerGestureRecognizer)
2)您可以实现手势识别器的委托功能并根据呈现的viewController有条件地禁用它。像这样的东西:
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return currentlyPresentedNavigationController.viewControllers.count == 1
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句