回顾:
1. 使用代码的方式创建控制器+界面
2. 使用 xib 的方式创建控制器的界面
3. 控件
UILabel、UIButton、UITextField、UIStepper、UISlider、UISwitch
4. UIAlertView、UIActionSheet
5. 委托模式
a. 参与方:两方
b. 各自的职责
6. MVC模式
a. 参与方:三方
b. 各自的职责
M: model 模型(数据存储,业务逻辑)
V:view 视图 (显示界面)
C:controller 控制器(完成m和v之间的互通)
本周:
1. 多界面的切换
2. 多界面之间的正向及反向传值
3. UIScrollView 滚动视图
4. 练习:APP的欢迎界面
5. UITableView 表视图(2.5天)
6. UINavigation Controller
7. UITabBarController
8. UICollectionController (集合视图)
今天:
1. 多界面的切换(多MVC的切换)
1.1 实现理念
界面的切换实际是控制器C之间的切换,每个控制器都有自己独立的视图,不能公用,所以,每换一个界面,其就是更换控制器。
每一个界面其实都是一个小型的MVC结构,V和C一定是独立的一套,但M可以被多组V+C公用。
1.2 如何实现
从A推出B,则使用控制器的presentViewController方法。
从B推出A,返回到刚才推出他的那个A,则使用控制器的dismissVIewController方法
2. 多界面之间传值
2.1 正向传值
a. 当控制器A推出控制器B时,A给B传值的过程(就是在present的过程中传值)
b. 如何实现?
因为A推出B,并且A持有B的引用,所以,只要B公开一个用于接受别人传递给他的值,那么A就可以借助B的引用为B赋值,即完成正向传值。
2.2 反向传值
a. 控制器A推出控制器B后,当B回到A时的过程中返回给A一个值(就是在dismiss的过程中传值)
实现方法:
方式一:
理念:既然B没有A的引用,无法顺利传值,那么只要在B中公开一个能过存储A引用的属性,这样,在A推出B时,把自己的引用存到B公开的这个属性中,那么B就拥有了A的引用,就可以给A传值,只不过A为了配合B接收传回的值,同样,A也的公开一个属性用于接收B回传的值即可。
方式二:
理念:为了避免方是一中,B持有的引用类型过于具体,使得B只有给A回传值,不能更宽泛的给任意类型 回传数值,可以选择委托模式来解决该问题。
接收数据方:BVC充当委托方,完成接收数据的部分
显示数据方:AVC充当代理方,只要接收到B发来的消息就立即显示
委托方三件事:
(1)定义协议(目的:规范,代理方,告诉代理方它会发什么样的消息)
(2)增加属性(目的:记录,代理方 对象的引用)
(3)合适的时机,发消息(合适的时机:在某些动作前或动作后,通过使用delegate记录的对象引用,给这个对象发消息)
代理方三件事:
(1)遵守协议
(目的:复合委托方delegate属性的要求)
(2)实现协议方法
(3)将自己设置为委托方的代理,也就是给委托方delegate属性赋值
3. 第三种 实现 多界面的切换的方式
3.1 引言
第一种方式,时两个VC之间直接present和dismiss,这次通过引入一个第三方管理者来实现界面之间的切换。引入的第三方管理者:UINavigationController(导航控制器)
3.2 什么时导航控制器
UINavigationController继承自UIViewController。
它本身不带有任何的能够独立显示的视图,但是能够容纳多个控制器的实例,并且通过push和pop方法实现,在多个控制器之间进行切换,从而实现界面的切换。
3.3 使用导航控制器的好处?
能够更清晰的记录界面的行进路线,可以基于这个路线, 回到任意位置。
3.4 如何使用导航控制器?
(1)创建导航控制器的实例
(2)为导航控制器设置根VC
(3)将导航控制器设置为window的根VC
(4)切换到下一界面时,借助于控制器的navigationController属性,就可以访问到管理这个普通VC上面的那个导航控制器,使用导航控制器的push方法,推出新的VC
(5)从推出的VC回到上一个界面,也是利用navigationController属性访问上看的管理者,然后使用pop方法。
3.5 导航控制器中的部分界面
(1)位于导航控制器界面部分顶部的条目叫做导航栏
导航栏可配置的部分分 左,中,有 三部分
左侧和右侧 用于容纳一个或多个可点击的特殊按钮
中间部分叫做标题
如何配置?
标题:navigationItem.title
左侧:navigationItem.leftBarButtonItem
右侧:navigationItem.rightBarButtonItem
按钮的类型:UIBarButtonItem
(2)位于导航控制器界面部分底部的条目叫做工具栏
作业:
1.选作:使用block实现值的回传
2.星座运程APP
a.界面1:有1个按钮,请选择您的星座,当用户点击值按钮时,跳转到第二个界面
b.假面2:有12个星座(可以做成12个按钮),选择其中一个星座,点击后,返回到第一个界面
c.界面1:显示选中的那个星座的运程说明
3.文本创建器(待更新)