Skip to content

4.2 以编程方式实现UINavigationController

以编程方式实现UINavigationController,让我们一起探索如何用纯代码构建导航控制器!🚀 这将使你能够完全掌控应用的导航流程,摆脱Storyboard的束缚。

创建UINavigationController的基础

首先,你需要创建一个UINavigationController的实例。这通常在你的AppDelegate或者其他初始化代码中完成。你可以将任何UIViewController设置为UINavigationController的根视图控制器。

swift
let rootViewController = MyViewController()
let navigationController = UINavigationController(rootViewController: rootViewController)
window.rootViewController = navigationController

这段代码创建了一个名为MyViewController的视图控制器,并将其设置为UINavigationController的根视图控制器。然后,将UINavigationController设置为UIWindow的根视图控制器。

Push和Pop视图控制器

UINavigationController的核心功能是管理视图控制器的堆栈。你可以使用pushViewController(_:animated:)方法将新的视图控制器推入堆栈,使用popViewController(animated:)方法将顶部的视图控制器弹出堆栈。

swift
// Push
let newViewController = NewViewController()
navigationController.pushViewController(newViewController, animated: true)

// Pop
navigationController.popViewController(animated: true)

pushViewController方法会将newViewController添加到导航堆栈的顶部,并显示它。popViewController方法会移除堆栈顶部的视图控制器,并返回到前一个视图控制器。动画效果使过渡更加流畅。

自定义导航栏

你可以自定义导航栏的外观,例如设置背景颜色、标题颜色和按钮。通过navigationBar属性可以访问UINavigationController的导航栏。

swift
navigationController.navigationBar.barTintColor = UIColor.red
navigationController.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

这段代码将导航栏的背景颜色设置为红色,标题颜色设置为白色。你还可以添加自定义的UIBarButtonItem到导航栏的左右两侧。

使用UIBarButtonItem

UIBarButtonItem代表导航栏上的按钮。你可以创建自定义的UIBarButtonItem,并将其添加到导航栏的leftBarButtonItemsrightBarButtonItems数组中。

swift
let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addTapped))
navigationItem.rightBarButtonItem = addButton

@objc func addTapped() {
    // 处理添加按钮的点击事件
    print("Add button tapped!")
}

这段代码创建了一个“添加”按钮,并将其添加到导航栏的右侧。当用户点击该按钮时,addTapped方法将被调用。

导航栏的显示与隐藏

有时,你可能需要隐藏导航栏。你可以使用setNavigationBarHidden(_:animated:)方法来控制导航栏的显示与隐藏。

swift
navigationController.setNavigationBarHidden(true, animated: true)

这段代码将隐藏导航栏,并带有动画效果。你可以根据需要在不同的视图控制器中控制导航栏的显示与隐藏。

通过以上步骤,你就可以完全掌握如何以编程方式实现UINavigationController。🎉 记住,实践是最好的老师!多尝试,多探索,你将成为iOS开发的专家!💪

本站使用 VitePress 制作