【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记20 Multiple MVCs 多MVC模式、NavigationController导航控制器

简介: 上一话讲完了小人脸Demo,我们也了解了MVC,那么这一话我们来把Demo复杂化,看看多个MVC之间是如何协同工作的。

上一话讲完了小人脸Demo,我们也了解了MVC,那么这一话我们来把Demo复杂化,看看多个MVC之间是如何协同工作的。回顾一下我们之前讲过的多个MVC的情况。


IOS提供了一些控制器,它们的视图是其他MVC。这些控制器包括UITabBarController(选项卡控制器)、UISplitViewController(分栏控制器)、UINavigationController(导航栏控制器).

下面是一个选项卡控制器的示例:


用户点击屏幕下方的按钮选择不同的界面,下面按钮是UITabBarItem类型的,通常你在storyboard中设置它们。如果选项卡按钮多于5个,那么在尾部会以“。。。”来表示,点击可以看到多出来的按钮。

下面是分栏控制器的示例:


分为左右两个MVC。左侧为Master,右侧为Detail.。注意这个视图在iphone和ipad中显示不同,后面会看到。

下面是导航控制器的示例:


导航控制器不像刚才我们介绍的前两个,你可以明显看出多个MVC的排列方式,选项卡使用底部的按钮来指导用户切换MVC,而分栏控制器把两个MVC并排放置。在导航控制器中,我们把MVC看成卡片,那么控制器像放置一堆卡片这样放置MVC,你只能看到最上面的那个MVC,这就是导航控制器在多个MVC之间共享一个小的屏幕空间的方法。

需要注意的是由导航控制器参与绘图的是顶部的一块区域,导航控制器可以在这里设置标题,也可以放一些按钮,但是这部分的具体内容却是由最顶层的MVC决定的,每个顶部MVC通过它的UIViewController里面一个叫做navigationItem的属性来传递顶部的内容给负责控制它的导航控制器。所以我们经常看到随着顶部MVC的变化,页面顶部的内容也在不断变化。底下的部分是由顶部的MVC来绘制的。


点击顶部的General按钮,会把新的MVC放到顶部。


现在我就看不到其他的MVC了,导航控制器也可以在底部绘制几个新的按钮通过顶部MVC控制器中的toolbarItems属性,它由一些列的barItem属性构成。所以与顶部一样,底部的按钮也会随着当前最顶部MVC的不同而不同。


你可以看到最顶部的返回按钮,这个按钮的作用是移走当前最顶部的MVC,我将回到我之前的位置。当点击返回按钮的时候,顶部MVC的移除是完全移除,从堆栈中完全移除了。

我们继续点击


MVC堆中的MVC会越来越多,然后全部点击左上角的返回按钮,直到最后一个MVC,这时候左上角已经没有返回按钮了:


这三个控制器的作用都是展示多重MVC,现在来重点讨论一下导航控制器的工作原理:


顶部紫色的代表一个MVC,我们想在屏幕上增加些功能,但是空间不够了,或者从逻辑上来说我们要添加的东西不应该显示在这个MVC上。所以我们应该创建另外一个MVC来管理那些不属于这个MVC的功能。


所以我应该找到一种方法让这两个MVC能共享一个屏幕控件,我能使用一个分栏控制器或者如果这两者之间是平等关系的话我们可以使用选项卡控制器。当然我们可以使用导航控制器。


导航控制器本身也是一个MVC,一个MVC的控制器,但是它是一个特殊的MVC,它有一个叫做rootViewController的outlet,这个outlet指向某个MVC,确切的说是指向某个MVC的控制器。当这个outlet指向某个MVC的控制器时,就会向那个MVC的视图绘制出来,也就是view属性,我们已经知道控制器的view属性也就是其控制的所有属性的根视图。如下图:



导航控制器把这个view放置到屏幕上,标题栏之下。因为它会布满整个矩形空间,所以标题栏会变成半透明以显示标题栏下面的那部分内容。那么我们如何让其他MVC与我们的导航控制器联系起来呢。当某个在这个视图中的UI元素,例如一个按钮或者其他东西被按下的时候,这可能导致其他的MVC被创建,当我们做这些变换的时候,我们始终会创建新的MVC.


然后导航控制器就会移到新建的MVC上。


然后新的MVC的左上角会有一个返回按钮。


当我们点击这个按钮的时候会返回到第一个MVC中,注意这个时候刚才的MVC已经彻底消失了!它不是被隐藏了,它从内存空间中被deallocated了。


这就是导航控制器的工作原理,分栏控制器和选项卡控制器也是类似的。


目录
相关文章
|
7月前
|
设计模式 监控 前端开发
深入解析iOS中的并发编程模式
【4月更文挑战第20天】 在当今移动应用开发中,提升程序的响应性和性能是至关重要的。特别是在iOS平台上,合理利用多线程和并发编程技术可以显著改善用户体验。本文旨在探讨几种在iOS开发中广泛使用的并发编程模式,包括线程、GCD(Grand Central Dispatch)、Operation Queues以及异步设计模式等。通过对这些技术的深入分析与比较,我们不仅将揭示各自的优势和潜在缺陷,还会展示如何结合它们以解决实际开发中遇到的并发挑战。
|
7月前
|
调度 iOS开发 开发者
iOS 中的并发编程模式:理解 GCD 和 Operation Queues
【4月更文挑战第19天】 在现代 iOS 应用开发中,有效地管理线程和并发是至关重要的。为了确保用户界面的流畅性和后台任务的高效运行,开发者需要掌握并发编程技术。本文深入探讨了两种主要的并发模式:Grand Central Dispatch (GCD) 和 Operation Queues。我们将分析它们的工作原理,比较它们的特点,并通过实际代码示例说明如何在 iOS 应用中实现高效的并发处理。通过本文,读者将获得在 iOS 平台上进行多线程开发的实用知识,以及如何根据不同的应用场景选择最合适的并发工具。
|
iOS开发
IOS - iPhoneX 怎么进入 DFU 模式(刷机必备)?
IOS - iPhoneX 怎么进入 DFU 模式(刷机必备)?
1326 0
|
开发工具 iOS开发 开发者
iOS 暗黑模式的适配总结
iOS 暗黑模式的适配总结
|
iOS开发
IOS 黑暗模式简单理解
IOS 黑暗模式简单理解
116 0
|
Android开发 iOS开发
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
419 0
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
|
Web App开发 API iOS开发
WebKit 代码“曝露”苹果 Safari 新功能:iOS 15/16 或添自定义暗黑模式、弹窗等设置
WebKit 代码“曝露”苹果 Safari 新功能:iOS 15/16 或添自定义暗黑模式、弹窗等设置
267 0
WebKit 代码“曝露”苹果 Safari 新功能:iOS 15/16 或添自定义暗黑模式、弹窗等设置
|
Swift iOS开发
Swift:暗黑模式iOS 13以上支持是否跟随系统和iOS13以下的主题适配
Swift:暗黑模式iOS 13以上支持是否跟随系统和iOS13以下的主题适配
1495 0
Swift:暗黑模式iOS 13以上支持是否跟随系统和iOS13以下的主题适配
|
测试技术 iOS开发
APNS IOS 消息推送沙盒模式和发布模式
在做.NET向IOS设备的App进行消息推送时候,采用的是PushSharp开源类库进行消息的推送,而在开发过程中,采用的是测试版本的app,使用的是测试的p12证书采用的是ApnsConfiguration.ApnsServerEnvironment.Sandbox模式,而在项目发布之后,现在使用的是发布版的证书进行推送,发现不能推送成功,最后才发现在使用PushSharp进行发布后的项目的推送需要使用ApnsConfiguration.ApnsServerEnvironment.Production模式。
1422 0
|
iOS开发
ios swift 实现简单MVP模式
        在移动开发中,会用到各种架构,比如mvp,mvvm等,其目的就是为了让项目代码的可读性更好,减轻在view(controller)中的大量代码问题。
1249 0