对UINavigationController的一点理解(出栈和入栈、和UITabBarController相结合)

对UINavigationController的一点理解

之前一直零零碎碎的在学一些控件方面的东西,也做过一个简单的计算器和一个不完善的ToDoList,忘记写博客。最近开始自己做一些更加有针对性的项目,学的东西也更加系统总体一点,觉得可以给自己做个笔记也可以分享一下自己的理解就来写博客了,这次是关于UINavigationController个人的一点理解,欢迎更正补充。

何为UINavigationController?

所谓Navigation Controller很好理解,就是导航控制器,而UINavigationController属于UIViewController(视图控制器)的一种,主要是用于导航功能,在显示多屏并具有一定层次结构的内容时发挥作用,通俗地讲就是切入、切出内容页。

基本使用

基本使用主要有以下步骤和方法:
- 首先创建两个子视图控制器
- 然后创建UINavigationController
- 更改基本属性
- 调用push、pop等方法
UINavigationController的这些基本使用都简单,但是开始的时候我也真的只是会简单的使用,尤其对于push和pop的理解只是停留在切换页面的层面上,所以在数据的更新上面总是没法完善,而后我看到了UINavigationController堆栈的一些知识。

UINavigationController视图入栈与出栈

UINavigationController视图的入栈和出栈相对于push和pop操作而言的话,push是入栈操作,而pop是出栈操作。

方法意义
pushViewController将视图控制器(要实例化)push到导航控制器中
popViewController将位于导航控制器栈顶的视图控制器从栈顶移除,并对屏幕显示的内容进行更新
popTo(Root)ViewController跳转到(根)视图控制器,并将位于该视图控制器上方的视图控制器从栈顶移除

(这些让我稍稍想到了C语言中的malloc/free对于动态分配空间的分配/释放,对于入栈出栈的理解至少可以参考)
而对于出栈入栈的理解可以借助实际使用来加深:

UINavigationController和UITabBarController相结合

现在在做的是一个背单词的app,为了实现展示单词列表的功能,我需要从TabBar的FirstViewController跳转到另一个有单词列表的ViewController,所以我用了一个UIButton,在方法中添加了如下代码

@objc func ShowVocabularyList(){
    let listView = ViewController()
    self.navigationController?.pushViewController(listView, animated: true)
}

但是run,点击button,没有反应!怎么回事呢?
在storyboard 中拖拽把根视图设为ViewController,内容显示无误…就是不能跳转…
最后我在AppDelegate.swift中添加了如下代码

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    let firstViewController = FirstViewController()
    let secondViewController = SecondViewController()
    let tabBarController = UITabBarController()
    let navigationController = UINavigationController(rootViewController:firstViewController)
    tabBarController.viewControllers = [navigationController,secondViewController]
    window?.rootViewController = tabBarController
    return true
}

跳转成功了!然后看代码,这段代码主要就在于实例化NavigationController和TabBarController,设置根视图。
原来之前我tabBarController是在storyboard中拖入,NavigationController则是直接在viewController中用了,根本没有实例化NavigationController,知道了这些的必要性,也更清楚了UINavigationController和UITabBarController之间的关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值