gpt4 book ai didi

ios - 导航栏未显示在 childViewController 内

转载 作者:行者123 更新时间:2023-11-28 14:50:22 24 4
gpt4 key购买 nike

我在我的 iOS 应用程序中创建了一个汉堡包菜单

我的 rootViewController 中有一个 navigationBar 但现在我需要将 navigationBar 移动到我的 childViewController 让一些功能/按钮工作。

现在我已将它移动到 childViewController 中,navigationBar 不显示。如果我使 childViewController rootControllernavigationBar 显示正常,这是因为在我的 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
}

这是我要将 navigationBar 添加到的 childViewController:

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 中的一个子 viewController 有一个 tableView。如果我单击其中一个单元格并转到新的 viewController,仍然可以通过向右滑动来访问汉堡菜单。

我只想访问顶层的汉堡包菜单,但现在看来我可以在我的应用程序的任何位置访问它。

最佳答案

1) Hamburger Menu view controller 应该是 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 Controller 应将 NavigationController(或其子类)与一些 Root View Controller 嵌入。所以在 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 属性为 nil

更新的答案

关于处理您的 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) 您可以实现手势识别器的委托(delegate)功能,并根据呈现的 viewController 有条件地禁用它。像这样:

    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return currentlyPresentedNavigationController.viewControllers.count == 1
}

关于ios - 导航栏未显示在 childViewController 内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49918414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com