UIKit框架
UIResponder
– UIApplication
– UIView
• UIWindow,UILabel,UIImageView,UIPickerViewUIAlertView,UIScrollVIew,UIProgressView,UIToolbar,UIWebView
• UIControl
– UIButton,UITextField,UISwitch,UISegementControl, UIPageControl,UISlider
– UIDatePicker
– UIViewController
• UITabBarController,UINavigationController,UITableController
IOS的MVC模式
MVC是所有面向对象语言都应该遵守的规范,MVC思想将一个应用分成三个基本部分:Model,View,Controller,这三个部分一最少的耦合协同工作,从而提升应用的可扩展性和可维护性。起整体结构如图所示
MVC模式,江程序代码分类Model,View,Control三种组件。
Model组件:在进行IOS应用开发时,Model组件通常是一些普通的OC类,这些OC类空用于保存少量的应用程序状态数据,
View组件:在进行IOS应用开发时,主要使用Interface Bui来的人来创建视图组件。在某些特殊的情况下,程序也可以需要在代码中出创建界面,修改界面。
Control组件:大部分时候,控制器组件都会集成UIKit框架中的UIViewController基类,通过集成该基类,可以让控制器类直接获取大量的功能,并且不在需要重新设置累的结构。
窗口,视图,视图控制器
UIResponder是视图响应这的基类(继承自NSObject)
– UIApplication,UIView,UIViewController是子类,都可以作为响应者
UIView是视图的基类
—窗口的UI控件都是UIView的子类
UIViewController是视图控制器的基类
窗口UIWindow是UIView的子类
窗口的主要作用,一时作为视图的容器,包含视图,二是分发时间给视图,一个APP通常只有一个窗口,且必须有一个窗口,三是与视图控制器一起写作,呈现内容
创建window对象
——使用storyboard,自动创建
——不使用storyboard,手动创建
//创建一个全屏的window对象
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
在AppDelegate类中创建window对象
在其他位置不应该创建window对象,但是可以获取的
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
视图控制器
视图控制器是视图和数据进行交互的控制器,在MVC模式中充当Controller角色
在所有视图控制器都是UIViewController的子类
一个APP需要一个window,而一个window需要一个跟试图控制器(window,rootViewController),作为首页或者第一屛
每个视图控制器包含一个根视图(view属性),其他视图都是根视图的子孙视图
——通过关联storybord中的ViewController
——通过关联xib
——通过手写代码
每个视图控制器应该对应一个界面和相应的业务
由于一个APP需要显示多个界面,所以一般会有多个视图控制器相互跳转
根视图控制器rootViewController
新建一个继承雨UIViewController的类,然后让程序的窗口加载并显示这个viewController视图控制器关联的用户界面。这个就是APP的跟试图控制器
UIViewController生命周期
- UIViewController??????(视图控制器),他包含如下常见的需要重写的方法
??????
- • viewDidLoad??????:当该控制器管理的视图被加载完成后,系统会自动调用该方法
- • didReceiveMemoryWarning???????????????????????????????? ??????????????:当系统检测到可用内存紧张时,将会调用该方法
- • viewWillAppear??????:当控制器管理的视图将要显示出来时,系统会自动调用该方法
- • viewDidAppear??????:当该控制器管理的视图显示出来后,系统会自动调用该方法
- • viewWillDisappear:当该控制器管理的视图将要被隐藏或被将要移出窗口时,系统会自动调用该方法
- • viewDidDisappear??????:当该控制器管理的视图被隐藏或被移出窗口时,系统会自动调用该方法 ????????????????????????
视图
视图试纸继承UIView类的控件,表示屏幕上一块矩形区域,在MVC模式中承担View的职责
一个ViewController??必须有一个根视图
视图的作用是用来显示所在区域的内容,并响应触摸事件??????????(UIControl??????子类
- •所有的视图都可以包含子视图
- • 常用操作
- • addSubview ??????????????添加一个子视图
- • removeFromSuperview ????????从父视图中删除自己
- • viewWithTag从自己和子视图中根据 ??????????????????tag????????查找视图
- • subViews ????????????????所有子视图的数组
- • hidden 控制是否隐藏
- • backgroundColor ????背景颜色
第一种:使用Xib创建根试图??
1,????????默认关联:????创建ViewController??????时勾选also create xib file
• 2,????????手动关联,????????????如果分开创建ViewController和??xib
- – 2.1 ????打开xib????文件,????????打开左侧dock????区域,????选择file’s owner
- – 2.2 右侧面板选择第三个???????????????? Identify inspector
- – 2.3 ??在CustomClass??????????????中填写要关联的ViewController????类名,????回车
- – 2.4 右键点击??????file’s owner,??将outlets中的 ????view右侧的小圆点拖动到根????view
- – 补充??:可以在??????ViewController????????????中定义多个副view,??在xib??????????中定义多个副视图 ??????,??????????????就爱你跟他们进行关联,????配合addSubview和
??removeFromSuperview?????????????????? 进行界面简单的切换
第二种:手写代码创建根视图
????重写ViewController??的loadView????方法,??self.view赋值一个视图对象
??????????
-(void)loadView {
//??????????????????????????????????手写代码创建一个全屏视图作为跟试图,重写此方法会导致关联????????????????????xib????失效
UIView *rootView = [[UIView alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
rootView.backgroundColor = [UIColor redColor];
self.view = rootView; }
??在viewDidLoad??????????????中手写代码创建控件??,添加到??????self.view??中
[UIScreen mainScreen]bounds]获取全屏的坐标和大小
在根视图中添加子视图
1,??????当使用xib????????????创建根试图时,??????????同事可以在xib中画子视图??????????
2,????????也可以在viewDidLoad???????????????????????? 方法中编写代码创建子视图
CGRect:??包含x,y,width,height????????四个变量
x,y????????????????????????????定位视图详单雨左上角的坐标位置
width,height??????????确定视图的宽度和高度???????? CGRectMake ????创建CGRect??????变量的函数??
initWithFrame??????????根据指定位置和大小创建视图
?????????????? self.view addSubView 添加子视图??????????
窗口,视图,视图控制器的关系
- 在??AppDelegate??????window????中创建window对象,??????????指定根视图控制器
- • ????视图控制器通过关联????????????xib??????????来构建界面,???????????????? ????????????也可以通过手写代码来创建界面,??????????完成界面布局(View????部分)
- • ????视图控制器通过时间机制响应用户交互,并通过跳转功能完成呢个界面切换??????????????????????????(Controller)
- • ????编写Model??????????类实现数据封装