IOS 控件之基础整理

 如果使用高版本的xcode6以上,创建一个singleViewApplication项目,然后点击项目修改maininterface中的内容清空,相当于创建了一个EmptyApplication。 

5.window对象

         在一个IOS的应用中,window对象一般只有一个,window对象负责一些系统功能,比如键盘管理,一般不负责具体界面的显示。为了可以在一个应用中切换多个界面,我们不会直接在window放置一些具体的控件、视图(Lable),而应该给window对象设置一个根视图控制器(玻璃),做为第一个显示界面。

6.屏幕的窗口     显示内容的空间大小。

                                      屏幕的大小       分辨率

                                      点(坐标)        像素

iphone3GS          320*480         320*480            3.5寸

iphone4/4s          320*480         640*960            3.5寸

iphone5/5s          320*568         640*1136          4.0寸

Retina屏上1个点 = 2*2个像素

非Retina屏上1个点 = 1个像素

注:

程序中计算位置和大小使用的单位是点,到了具体的硬件上,自动转换相应的分辨率。

坐标系:屏幕的左上角为0,0原点

如果在普通屏幕上1一个点代表1个像素,在高清屏(Retina视网膜)屏幕上,1一个点代表2*2个像素。

7.具体描述屏幕的位置和大小的frame属性

         struct CGRect {

           CGPoint origin;

           CGSize size;

            };

            typedef struct CGRectCGRect;

            structCGPoint {

             CGFloat x;

             CGFloat y;

            };

            typedef struct CGPointCGPoint;

         structCGSize {

             CGFloat width;

             CGFloat height;

            };

            typedef struct CGSizeCGSize;

8.根视图控制器(root view controller)

                   视图 显示数据

                   视图控制器 控制显示什么数据

                   一个界面有一个视图对应一个视图控制器

                   控制台的警告也是指的根视图控制器

                   根:最下面的视图控制器

程序执行顺序:

         main.m->AppDelegate->window.rootViewController->ViewController->View->ViewDidLoad…

9.视图控制器(ViewController)和视图(View)

a.具体的功能

                   视图(View) 就是我们看见的界面

                   视图是UIView类或子类的对象(与VC的关系是组合有关系)

                  

                   视图控制器(ViewController,简称为VC)

                   控制视图如何显示的对象

                   是UIViewController类或子类的对象

总结:一个界面通常就是一个视图控制器,显示部分由属性view来解决,显示的内容由视图控制器来解决。

b.之间关系

         一般情况下,视图控制器默认就拥有一个视图,视图就是视图控制器的小跟班。在创建一个视图控制器对象(VC),此VC就拥有一个视图对象,做为VC的一个属性存在。self.view(组合)。

10.视图与window对象

         window相当于电视机,视图相当于电视节目的元素,小到花花草草在到宇宙万物(当然电视由于屏幕大小,只能看到一部分)。

 

一、viewDidLoad方法

         1.1 是什么

                   是UIViewController类中定义的方法

         1.2 在什么时候调用

                   在VC所控制的界面(View)"第一次"需要显示出来的时候,需要加载VC,等加载VC后,自动调用此方法。

         1.3 干什么

                   在此方法中设置界面的初始显示

         1.4  注意

                   一般此方法的第一会调用父类的方法,目的是让父类中的设置也起作用。

二、控件(Control)

         2.1 什么是控件

         严格来说,凡是UIControl类及子类的对象,才叫控件,控件会触发事件。严格来说UIButton是控件,UILabel不是控件。一般来说,口头上的经常能在界面上看见的东西,都叫控件。

         2.2 控件(UIControl)和视图(View)的关系

                   控件就是视图的一种

                   UIControl是UIView的子类

三、按钮控件(UIButton)

操作步骤:

         3.1 创建按钮对象

                   使用工厂方法,UIButtonTypeSystem

         3.2 设置相关属性

                   title按钮上显示的内容

                   state按钮状态

                   [buttonsetTile:…forState:…];

         3.3 加入到父视图中

         3.4 添加事件(Event)

                   addTarget:action:forControlEvents:

                   target:目标

                            当按钮触发了事件时,向哪个对象发送消息。

                            经常使用self,向当前对象发送消息。

                   action:动作

                            向target对象发送什么消息

                   events:事件

                            当用户触发了按钮对象的哪种事件时,才向target发送action消息。               UIControlEventTouchUpInside手指在按钮上按下并抬起时,触发此事件。

                   UIControlEventTouchDown手指在按钮上按下时触发此事件。

注:自定义的视图内容,要添加到自定义的视图控制器中,所以自定义一个类继承UIViewController。

 

四、视图控制器的创建方式

         4.1 代码的创建方式 code

         4.2 图形化界面的创建方式 xib(IOS5.0前)/storyboard(IOS5.0后)

         4.3 执行过程

                   main.m->Appdelegate->appliction…->

                   ***[TRViewControlleralloc]initWithNib …]

         4.4 操作步骤:

                   1>拖拽(show the object Library)相应的视图或控件到xib文件中。(xib自动创建一个相应的对象)

                   2>连线 (ctrl+鼠标左键连线,鼠标右键连线)

                   IBOutlet

                   使用类似于组合的模式,创建属性对象。(Xib)

                   是一种属性,这种属性指向了xib中的一个对象。

                   IBAction

                   是一种方法,这个方法连接到了xib中的一个控件,当用户触发了这个控件的事件方法,会调用此方法。

         4.5Interface Builder(IB)

                   1>是什么

                            是一个工具软件,以前是独立的,从xcode4开始集成到xcode中了。

                   2>干什么

                            帮助程序员设置和构造界面用的,可以不写代码或少写代码来构建界面,从而提高我们的开发效率,所见即所得。

                   3>工作原理

                            将界面上需要的控件(或视图)的创建、属性的设置、之间的关系等都保存到一个xml文件中,程序运行时,从xml中读取所有的控件信息、配置,自动创建这些对象,自动加入到父视图中。

                   4>一些文件

                            .doc(office2003以前)     .docx(office2003以后)

                            .nib                                       .xib

 

                            VC类->*.h *.m

                            IB->*.xib

         4.6 连线常见问题

                   1>xib中的视图或控件与类中的属性关联错误

                            删除类中的属性,并不会删除连线关系

                   'NSUnknownKeyException', reason: '[<TRViewController0xa8509b0> setValue:forUndefinedKey:]: this class is not key valuecoding-compliant for the key myLabel.'

                   2>xib中的控件与类的事件方法关联错误

                            删除(修改)类中的方法,并不会删除或修改连线关系

                   'NSInvalidArgumentException',reason: '-[TRViewController onClick]: unrecognized selector sent to instance0x8c33da0'

                   解决:删除原有连线,重新连线。

                   3>自己创建视图控制器中的根视图,默认是不会连线的。

'NSInternalInconsistencyException', reason:'-[UIViewController _loadViewFromNibNamed:bundle:] loaded the"TRViewController" nib but the view outlet was not set.'

            解决:自己连线。

 

五、详细操作

            5.1 步骤(视图)

              a.创建一个视图控制器,并创建相应的xib文件。

              b.将视图控制器设置成根视图控制器(rootVC)。

              c.在show the object library中,拖拽相应的视图或控件到父视图中。

              d.按住鼠标右键,连接相应的视图连线到相应的类(.m文件)的@interface部分。

              e.如果需要视图加载的时候,初始化子视图,应该在viewDidLoad方法,通过属性进行修改。

              注:相应的xib中的视图控制器类型要与视图控制器的类的类型相匹配。

            5.2 步骤(事件方法)

              a.创建一个视图控制器,并创建相应的xib文件。

              b.将视图控制器设置成根视图控制器(rootVC)。

              c.在show the object library中,拖拽相应的控件到父视图中。

              d.在xib中,右击相应的控件连线到相应的类中(视图控制器.m件implemention部分),会弹出一个对话框,设置相应的参数,会自动生成相应的事件方法。

            5.3IBAction对应的事件方法的参数

              任何一个控件产生事件时,如果调用一个方法,且这个方法有参数,就会将控件自身传给这个参数。(事件源)

              默认情况下,事件源的参数是id类型,使用前必须进行类型转换。

           

            总结使用控件四个步骤:

            (1)创建控件

            (2)设置属性

            (3)添加事件方法

            (4)添加到父视图         

六、控件S

            6.1UIStepper 控件

              重要属性:

                     .value当前值

                     .stepValue步进值(每一次增加或减少多少)

                     .minimumValue最小值

                     .maxmumValue最大值

              最常用的事件:

                     valueChanged(stepperValueChanged)

              练习:改变UIStepper的初始值,默认为20.

                                   取值范围是-50~+50之间,每次步长为5,显示在Label中。

            6.2UISlider 滑块控件

              重要属性:

                     .value当前值

                     .minimumValue最小值

                     .maxmumValue最大值

              最常用的事件:

                     valueChanged

            6.3Switch 开关控件

              最重属性:

                     .on: BOOL (getter:isOn)

              常用事件:

                     valueChanged

                    

                     //指定getter方法为isOn

                     @property(nanatomic,getter=isOn)BOOLon;

           

//通过UIColor类,可以得到一个颜色                       

self.myLabel2.backgroundColor = [UIColorcolorWithRed:0.5green:0.0blue:0.0alpha:1.0];

                                         

 

1.UIAlertView

         弹出一个警告小窗口。

         使用步骤:

                   1)创建对象

                   2)设置属性

                   3)show方法显示出来

                   4)设置被委托对象

                            1>遵守协议<UIAlertViewDelegate>

                                      UIXXX+Delegate…

                            2>实现方法

- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

2.委托(delegate)

         2.1 是什么

                   一个对象(A)委托另一个对象(B)做事(调用方法)。

                   我们把A叫委托方(委托对象),把B叫被委托方(被委托对象)。

         2.2 委托协议

                   委托方希望被委托方能做的事情写入协议。

                   委托方就是UIAlertView,被委托方就是self(viewController)。

                   同时定义了委托协议UIAlertViewDelegate。

         2.3 被委托方需要做的事情:

                   (1)遵守协议@interface … <委托协议>

                   (2)实现协议中要求的方法

                   (3)将委托方与被委托方建立联系(通过属性关联)

                            alertView.delegate =self;

                                      使用时,将委托对象调用被委托对象的方法,这种方式叫回调。(CallBack)

3.UIActionSheet

         3.1 是什么

                   类似UIAlertView的一个选择框。(分享)

         3.2 使用

                   1)创建对象

                   2)设置属性

                            UIActionSheet *as =[UIAction Sheet alloc]initWithTitle … delegate … cancelButtonTitle …

                   3)设置被委托对象

                            1>遵守协议UIActionSheetDelegate

                            2>actionSheet: clickedButtonAtIndex...

                   4)在某个视图下方弹出来

                            [asshowInView:self.view];

                            注:这个方法不可以用在viewDidLoad方法中

4.UITextField文本框控件

         4.1 是什么

                   是一个单行文本框控件,用来接收用户输入的信息。

         4.2 使用

                   与前面的控件相类似。

         4.3 重要的属性

                   .text          文本框中的内容

                   .secure… 密文的形式显示信息

                   .placeHolder 文本框的提示信息(淡显)

                   clearButton 是否出现清除功能

                   keyBoardType 还可以指定虚拟键盘的类型

                   Appearance 键盘显示的样式

                   ReturnKey 右下角的按钮提示

         4.4 设置被委托对象

                   1)代码方式

                            self.password.delegate= self;

                   2)图形化界面方式

                            右击相应的文本框控件连线到相应的file’s owner

         4.5 相应事件方法的功能

                            以下事件方法,描述了文本控件使用时候的生命周期:

将要执行编辑文本框内容时执行

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{}

已经开始文本框内容的编辑

- (void)textFieldDidBeginEditing:(UITextField *)textField{

}

文本框内容编辑将要结束

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{}

文本框内容编辑已经结束

- (void)textFieldDidEndEditing:(UITextField *)textField{}

文本框的内容发生修改

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)rangereplacementString:(NSString *)string{}

清除文本框的内容执行

- (BOOL)textFieldShouldClear:(UITextField *)textField{}

点击虚拟键盘右下角的按钮时执行此方法

- (BOOL)textFieldShouldReturn:(UITextField *)textField{}

            4.6 隐藏键盘

              1)第一响应者      

                     一个界面中一般只有一个第一向响应者,如果UITextField控件变成第一响应者,键盘会自动弹出。

                     如果想取消键盘(隐藏),就得让UITextField控件放弃第一响应者身份,向对象发送resignFirstResponder,就可以让textField控件放弃第一向应者。

              2)有三种方式

                     1>点击按钮向文本框发送消息,隐藏键盘。

                     2>点击空白处也关掉文本框修改父视图的类型

                            a.UIView->UIControl

                            b.添加相应的事件方法 touchUpInSide

                     3>点击虚拟键盘右下角的return键盘

                            textFieldShouldReturn:

 

一、MVC 设计模式

         1.1 MVC是什么

                   是一个大型综合的设计模式。

                   设计模式是解决某一类问题的一种最优的办法。

         1.2 为什么要用设计模式

                   提高程序的可重用、可扩展性、可维护性。

                   苹果的系统大量的使用了设计模式。

         1.3 MVC简介

                   M:Model 模型

                            处理数据和业务逻辑,保存数据、网络通信…业务计算。

                   V:View 视图 xib

                            给用户提供界面显示,接收用户输入。

                   C:Controller控制器

                            控制程序的流程及跳转,协调View和Model之间的工作。

                   课程安排:

                            control&controller

                            view

                            model

 

         1.4 MVC之间的关系

                   CV:

                            C->V(IBOutlet)

                            V->C(TargetAction,IBAction,Delegate)

                   CM:

                            M不能访问C的

                            C->M 通过属性的方式或发送消息关联在一起的。

                   VM:

                            不能访问,不可以交互的。

         1.5 多MVC(多界面开发)

                   应用程序中有多个界面,而每一个界面就是一个MVC,所以说多界面开发就是多MVC开发。

                   操作步骤:

                            a.创建两个VC类

                            b.创建一个VC对象,并设为根视图控制器

                            c.添加了一个按钮,并添加了相应的事件方法

                                      1>创建第二个VC对象

                                      2> [selfpresentViewController:vc2animated:YEScompletion:nil];

                            d.在第二个VC对象中,添加一个按钮和相应的事件

    [self dismissViewControllerAnimated:YES completion:nil];

              视图控制器的生命周期:重写(dealloc方法)

                     1>第一个界面的生在appdelegate中

                        第二个界面的生在第一个界面中的事件方法中

                     2>A界面跳转的时候,创建新的B界面,但原来的A界面没有销毁。从B界面返回A界面,原有的B界面就销毁了。

                            根视图控制器永远不会销毁。

 

            1.6 传值

              将VC1中的数据传给VC2中。

              使用步骤:

                     VC1:

                            a.在界面跳转之前,创建VC2对象

                            b.并传值给VC2.属性(model)

                            传值的方式:属性、方法、自定义方法(事件源)

                     VC2:

                            a.声明一个属性(model),接收vc1传来的值。

                            b.第二个界面显示的时候(viewDidLoad)                    

                                   将model的数据->view显示(label)

 

 

1.传值的方向性

         如果从A界面跳转到B界面并传值,正向传值。

         如果从B界面返回到A界面并传值,反向传值。

2.反向传值

         VC1:

                   2>在VC1跳转VC2前,将自己赋值给VC2的属性。

                   3>在VC1声明一个属性,用来接收传值。(model)

                   5>重写了viewWillApear方法(每次界面显现的时候执行),将model的值->view(label)

         VC2:

                   1>首先要保存前一个界面的引用(属性)

                   4>触发返回上一个界面方法时,将VC2值传给VC1的Model。

        

         传值方式:

                   属性

                   方法

                   委托模式

 

         "委托模式"传值方式:

                   1.定义一个委托协议—(1)

                            传值方式:属性/方法—(2)

                   2.委托方—(3)

                            创建一个属性关联被委托式(delegate)—(4)

                            反回前一个界面前,得到委托方的值—(9)

                            (textFieldvalue)->self.delegate.value= textFieldValue

                   3.被委托方—(5)

                            遵守协议—(6)

                            实现协议要求的属性和方法—(7)

                            接收到值后,将值显示在界面上—(10)

                                      viewDidAppear-> self.myLabel.text = self.value;

                   4.将委托方与被委托方关联一起—(8)

                            在VC3->VC2之前,vc2.delegate = self;

 

                   补充:

                            声明属性时候的关键字:

                                      assign 基本数据类型,默认assign

                                      weak(MRCassign)

                                               修饰对象的引用,仅仅是指向对象,不会通知对象的引用计数器加1。如果指向的对象销毁了,那么该引用会自动置空。

                                      strong(MRCretain)

                                               修饰对象的引用,当该引用指向对象的时候,会通知引用计数器加1 。

                                      copy

                                               修饰对象的引用,但是会将原有的对象内容复制一份,并得到新的内存地址。

 

                                      *NSCopying对象的复制 深复制(深拷贝)

                                      NSString*str = [NSString alloc]init…"hello"];

                                      NSString*str2 = [str copy];

 

                                      引用复制 浅复制(浅拷贝)

                                      NSString*str = [NSString alloc]init…"hello"];

                                     NSString*str2 = str;

                                                                           

                                      int i =10;赋值

                                      int *p =&i;赋值(传地址)

 

4.UINavigationController(导航控制器)

         4.1 是什么

                   是控制器UIViewController的子类,是一个视图控制器的控制器,是用来管理其它VC的VC。(用来管理其它视图控制器的)

         4.2 有什么用

                   管理和控制VC的走向,比present方式更好、更清晰。

         4.3 怎么用

                   1) 创建一个UINavigationController的对象或*其子对象。并且要指一个根视图控制器。

                   2)推出一个界面(VC) 界面跳转

                                      self.navitionControllerpush VC2

                   3) 返回前一个界面

                                      a.会自动生成一个返回方式

                                      b.指定一个事件方法返回

                                               [self.navitionControllerpopViewController];

         4.4 内部原理

                   1)navi内部维护着一个VC对象的数组

                            self.navigationControllers.viewControllers

                            将此数组当做栈来管理

                            栈是一种数据结构,特点是先进后出,后进先出。

                   2)navi必须有一个根VC,第一个被navi包含的VC。

                   3)push一个新界面(VC),旧的VC是不会被释放的。

                   4)navi会保持所有push进去的VC的引用,push一个VC其实是此VC放入到navi中的数组中。

                   5)当pop一个VC从navi中出来时,此VC就会被释放。

                   6)不能pop根VC

         4.5 使用方式

                   传值:原理同上(present),重构传值练习。(正、反)

                   1)NavigationBar(导航栏)

                            导航栏主要分为三个部分,分别是左,中,右。

                            a.中 标题(Title)

                                      在具体的VC,设置了一个属性self.title。(viewDidLoad)

                                      当界面跳转时,默认的返回按钮,自动更新为上一个界面的标题。

                            b.左、右按钮

                                      .navigationItem.leftBarButtonItem

                                      .navigationItem.rightBarbuttonItem

                            c.UIBarButtonItem

                                      专门用于各种bar上的按钮,和UIButton不一样的系统按钮。

                                      系统按钮

                                               initWithBarButtonSystemItem:target:action:

                                      文字按钮

                                               initWithTitle:style:target:action:

                            d.多个按钮

                                      .navigationItem.leftBarButtonItems…

                                      .navigationItem.rightBarButtonItems…

                            e.隐藏导航控制器头

                                      self.navigationController.navigationBarHidden= YES;

                   2)ToolsBar 工具栏

                            工具栏默认是隐藏的。

                            a.显示工具栏

                                      self.navigationController.toolBarHidden= NO;

                            b.UIBarButtonItem

                                      专门用于各种bar上的按钮,和UIButton不一样的系统按钮。

                                      系统按钮

                                               initWithBarButtonSystemItem:target:action:

                                     文字按钮

                                               initWithTitle:style:target:action:

                            c.向工具栏添加按钮

                                      self.toolBarItems= @[……];

                            d.美工具栏的样式

                                      Fixed:固定值 填补指定宽度

                                      Flexibile:弹簧效果,尽可能的填补空间。

                   3)在一个NavigationController中,可以继续使用present,当然也可以使用NavigationController。

 

 

                                                        

                           

 

1.copy

         默认情况下,自定义的类是不具备copy能力的,必须遵守NSCopying协议,实现copyWithZone方法才可以具备copy能力,本质上copy就是新创建一个一模一样的对象(空间)。

         还想复制相应对象的值,是不是要依赖一个初始方法,在创建对象的时候,要把复制对象的值也要传进来。

         如果一个对象的属性修饰为copy,那么在给属性赋值的时候,相当于自动的发送了一个copy消息。

2.图像

         显示图信息。

         2.1 基本概念

                       数据                容器

                   NSString           UILabel

                   UIImage          UIImageView

         2.2 在界面上显示图像

                   使用步骤:

                            1)创建容器对象,并指定数据对象

                                      [[UIImageViewalloc]initWithImage:]

                            2)将它添加到父视图中

                   详细的操作步骤:

                            1)创建图像的对象,图像的文件名是包含扩展名的

                            2)将图像的对象放到图像的视图中

                            3)设置图像视图的位置和大小

                            4)将图像添加到父视图中

         2.3 contentMode属性

                            设置视图显示的样式,类型UIViewContentMode类型(枚举)

                            //填充满屏(默认) 拉伸

                            UIViewContentModeScaleToFill

                            //保持图片的原样, 保持宽高比不留白边。

                            UIViewContentModeScaleAspectFill

                            //保持等比显示 留有白边

                            UIViewContentModeScaleAspectFit

3.UIScrollView

         3.1 作用

                   在有限的区域中显示比较大的数据(图片、文字)。     3.2 本质

                   是一个View的View,用来管理其它的视图。

         3.3 使用

                   将其它视图放入到ScrollView,设置相关属性即可。

         3.4 关键属性

                   .frame scrollView的位置和大小

                   .contentSizescrollView的内容大小

         注:

                   a.不要设置imageView.frame的大小,默认大小就是和图片的大小是一样的。

                   b.contentMode = …AspectFill;

         3.5 重要属性

                   放大或缩小功能

                   1)比原来缩小多小倍

                            .minmumZoomScale= 0.2不能小于图片的20%

                            比原来放大多少倍

                            .maxmumZoomScale= 1.0不能比图片的本身大

                           

                            直接指定比率的大小是不合理的

                                     用物理屏幕的大小/图片的大小

                                              使用宽/高比值最小的那个

                   2)通过委托模式解决最终的问题

                            给scrollView指定delegate对象,回答以下问题:

                           

                            对scrollView中哪个子视图进行缩放操作

                            -(UIView*)viewForZoomingInScrollView…{

                                      returnself.image;

                            }

         3.6 重要属性

                   //翻页的时候 整页翻

         scrollView.pagingEnabled =YES;

              .showHorizontalScrollIndicator 显示横条

              .showVericalScrollIndicator 显示竖条

4.UIPageControl

            4.1 重要属性

              currentPage 当前页号

              numberOfPages 得到总页数

              pageIndicatorTintColor 未选中界面的颜色

              currentPageIndicatorTintColor 选中界面的颜色

 

 

5.UITableViewController(表视图控制器)

         5.1 是什么

                   是列表方式展示数据的一种VC

         5.2 在哪用

                   非常常见,有规律的展示固定样式的数据。

                   如果不用TableView,管理大量数据时:

                   1)手动布局,计算坐标

                   2)手动判断和事件处理

                   3)手动设置每一个控件的值

                   4)手动管理内存

         5.3 能帮助我们干什么

                   管理布局,管理事件,有规律的展示数据,管理内存...

                             

1.UITableViewController组成

         UITableViewController中的View类型是UITableView。

         +tableView : UITableView

                   +Table Header 表头

                            +Section 分区

                                      +SectionHeader分区头

                                               +Row行(Cell)

                                      +SectionFooter分区尾

                   +Table Footer 表尾

         表头、表尾、分区头、分区尾都可以没有。

         TableView 有两种Style:

                   Plain: 普通Style,只有一个分区。

                   Group: 组,有多个分区。

2.UITableView两个委托

         数据源 是TableView显示数据的来源。

         .dataSource :id<UITableViewDataSource>

         代理对象 处理一些数据源之外的其它事项,事件触发。

         .delegate :id<UITableViewDelegate>

3.UITableView重的问题

         三问:(显示)

                   a.你有几个分区

                            numberOfSectionsInTableView

                   b.每个分区有几行

                            numberOfRowsInSection

                   c.每行的内容是什么

                            cellForRowAtIndexPath

4.创建一个UITableViewController

         使用步骤:(自动生成)

                   a.继承UITableViewController

                   b.实现三问

         使用步骤:(xib手动生成)

                   a.创建UIViewController

                   b.拖拽一个UITableView到父视图中

                   c.将VC设置为被委托对象

                            <1>遵守协议(UITableViewDataSource)

                            <2>实现方法(三问)

                            <3>委托对象与被委托对象建立关联(连线)

         使用步骤:(code手动生成)

                   a.创建UIViewController

                   b.手动创建UITableView对象(code)

                   c.将VC设置为被委托对象

                            <1>遵守协议(UITableViewDataSource)

                            <2>实现方法(三问)

                            <3>委托对象与被委托对象建立关联

                                               (tv.dataSource= self)

5.多分区的使用

         每个分区有几行 参数1:事件源 参数2:区分不同的分区

                            - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section;

         注:要将UITableView的Style改成Grouped。

6.区分多行 indexPath

         NSIndexPath是一种集合(保存多维数组)描述数据关系。

         用来存储路径。例:描述分区行->Cell

                   .section 描述哪个分区

                   .row 描述此分区的哪一行

7.模型层与View层的关联

 

8.UITableViewCell类

         8.1 是什么

                   TableView中每一行就是一个UITableViewCell类型的对象。UITableView其实是UIView的子类,它是一个视图。

         8.2 Cell中的属性

                   UITableViewCell视图有以下子视图

                            .textLabel : UILabel用于在Cell上显示文字内容

                            .detailTextLabel :UILabel 用于在Cell上显示详细内容

                            .imageView :UIImageView 用于图片

         8.3 Cell显示的样式

                   Cell的style(系统提供的) initWithStyle

                            Default:默认,不显示详细信息

                            Value1:左右显示主要信息和详细信息,显示图片信息

                            Value2:居中显示详细信息,不显示图片信息

                            Subtitle:可以显示详细信息,详细信息另起一行

                            也可以自定义Cell

         8.4 Cell的性能(Cell的重用)

                   (1)第一种重用方式

                            tableView在运行期间,出了界面的Cell并不会释放,而是放到了tableView中的队列中,所以,需要在创建Cell之前先试着从此队列中去拿已经存在的Cell对象,如果能拿到就不需要创建,而是重用Cell对象。

                   (2)***第二种重用方式

                            向tableView“注册”一个重用的Cell对象,注册后如果向tableView索要队列中的对象时,如果没有队列中没有空闲的Cell对象,tableView会自动帮我们创建一个并返回,这样可以确保dequeue方法一定会返回一个Cell对象供我们使用。

                            使用步骤:

                            <1>注册

                            - (void)viewDidLoad

{[self.tableViewregisterClass:[UITableViewCellclass]forCellReuseIdentifier:CellIdenitifier];   }

              <2>直接去队列里面取

                     UITableViewCell*cell = [tableViewdequeueReusableCellWithIdentifier:CellIdenitifier];

            8.5 一向应(答)

              处理相应的事件方法。

              遵守一个协议(UITableViewDelegate)

              实现方法 didSelectRowAtIndexPath

              例:点击某一个Cell,跳转到详细信息界面。

                     1)创建一个详细信息界面

                     2)传值

                            将选中Cell的信息传值给新的界面

                     3)push一个新的界面

 

1.如何向TableView中增加一行数据(反向传值)

                   当从第二个界面返回第一个界面时,将数据传回给当前界面的模型层,但是界面不会自动的刷新,需要手动通知tableView刷新界面(重新执行三问)。

                   在viewDidApear方法中

                            [self.tableViewreloadData];//全局刷新

                            //局部刷新

                            self.tableViewinsertRowsAtIndexPath:…

                   注:如果复用指定样式的Cell

         UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:@"Cell"];

    if(cell== nil){

        cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:@"Cell"];

    }

2.tableView的编辑模式

            2.1 是什么

              可以向TableView中插入、删除、移动Cell的一种状态。  2.2 如何进行编辑模式

              (1)UITableView有个属性editing(BOOL),将其值设置为YES会进行编辑模式,NO会退出编辑模式。

              (2)如何删除和插入

                     两问一响应:     

                            之两问:

                                   <1>哪些行进行编辑模式:(默认是所有行)

                                          -(BOOL)tableView:canEditRowAtIndexPath

                                   <2>进入模式时,样式是什么样的:(默认是删除)

                                          -(UITableViewCellEditingStyle)tableViewedtingStyleForRowAtIndexPath;

                            一响应:

                                   commitEditingStyle:forRowAtIndexRow:

                                   删除数据:

                                          1)***先从模型层删除相应的数据

                                          2)再从View层删除相应的数据

                                   插入数据

                                          1)***向模型层中插入相应的数据

                                          2)在视图层添加相应的数据

              (3)移动行

                     一问一响应(在编辑状态下 按住某行Cell进行移动)

                     一问:

                            哪些行可以移动(默认是所有行都可以移动)

                                   -(BOOL)tableView:canMoveRowAtIndexPath:

                     一响应:

                            当用户进行移动时,调用哪个方法进行数据

            -(void)tableView:moveRowAtIndexPath:toIndexPath;

                            操作步骤:

                             1.从model层,取出要移动的数据,将原来位置的数据删除掉

                            2.添加到新的位置 会自动刷新视图

 

1.UITableViewCell 高级

         1.1 是什么

                   是视图,是UIView的子类。

         1.2 组成

                   两大视图:

                            +contentView : UIView

                                      +textLabel : UILabel

                                      +detailLabel : UILabel

                                      +imageView : UIImageView

                            +accessoryView : UIView

         1.2 accessoryView

                   辅助视图,协助Cell实现一些界面效果,但默认是nil(没有辅助视图),当进入编辑模式下,辅助视图会默认隐藏。

         1.3 如何使用

                   (1)是UIView属性,可以指向任何类型的视图

                   (2)系统提供4种已经定义好的辅助视图

                            accessoryType来指定:

                                      DisclosureIndicator">"

                                               提示用户点击此Cell有更详细的内容

                                      DetailDisclosureButton"i"+">"

                                               提示用户点击此按钮i也会有更详细的内容

                                      Checkmark"√"

                                               一个"√",相当于打了个标记

                                      DetailButton"i"

                                               仅仅提示用户点击此按钮,会显示内容

                                      注:如果点击了辅助视图的按钮,会触发方法

tableView:accessoryButtonTappedForRowWithIndexPath

                   (3)除了使用系统定义好的辅助视图,还可以自定义辅助视图。

                            cell.accessoryView =view(任意视图)

                   (4)也可以自定义ContentView,定义的内容是ContentView的子视图

                             [cell.contentViewaddSubview:view];(任意视图)

                   注:如果自定义的是辅助视图,x,y坐标无效。

                                        如果自定义的是内容视图,x,y坐标有效。

                                        如果内容视图有值,自定义视图会将原来的内容视图挡住。

         1.4 自定义分区头、分区尾信息

                   (1)可以设置文字

                            tableView:titleForHeaderInSection

                            tableView:titleForFooterInSection

                   (2)可以设置视图

                            viewForHeaderInSection

                            viewForFooterInSection

                   (3)在导航栏中也有相关属性可以通过view赋值

                            self.navigationItem.titleView

                   1.5 完全自定义Cell

                            有两种创建方式,一个code方式,一个是***xib方式。

                            (1)基本原理

                                      UITableViewCell类是TableView的标准Cell类,自定义Cell就是自己写Cell类,然后在三问中最一个,“每一行的Cell”中回答,创建自定义的Cell。

                            (2)如何实现

                                     借助xib文件的功能,创建自定义Cell的界面,然后和自定义的Cell类进行绑定即可。

                            (3)详细的实现步骤:

                                      <1>创建一个Cell的类和xib文件

                                      <2>向xib中添加相应的视图

                                      <3>将xib中的视图与类的属性建立关联

                                      <4>在tableView中的三问,最后一问中使用自定义Cell对象。

                                                         a.注册的方式 创建自定义的Cell

                                                                  UINib *xib= [UINibnibWithNibName:@"TRTableViewCell"bundle:nil];

    [self.tableViewregisterNib:xibforCellReuseIdentifier:Identifier];

                                                         b.在队伍当中取出自定义的Cell对象并使用

TRTableViewCell *cell = [self.tableViewdequeueReusableCellWithIdentifier:Identifier];

                                   c.一定要设置自定义Cell的高度

                                          heightForRowAtIndexPath

                     <5>配置Cell对象中显示的内容

            1.6 TableView的使用

              (1)静态(Static)的TableView

                     <1>是什么

                            程序员直接写死TableView中有多少分区、多少行、以及每行的内容是什么。

                     <2>如何使用静态的TableView

                            硬代码的方法回答所有问题。

                            if(区、行){ 就怎么样 }

                            else if(区、行){ 就怎么样 }

                            else { 就怎么样 } 或使用switch

                     <3>应用广泛

                            各种设置界面(不会)

                            展示一个对象的信息(会变),静态的TableView并不意味着Cell中的内容不会改变。

                            使用code与xib创建静态的TableView

                            注:Demo 显示内容使用静态TableView

                                          Demo 显示的样式静态TableView但数据是动态

                                          Demo 使用xib的Cell实现表态的TableView

                                                 操作步骤:

                     1.拖拽一个Cell视图到tableView所在的xib文件中。

                     2.将该Cell连线到相应的TableViewController中的属性。                     3.在TableView的第三问中,直接回返回Cell对象属性。

                     注:如果需要设置Cell中的属性,参照自定义Cell。

              (2)动态(Dynamic)的TableView

                                      <1>是什么

                                               TableView中有多少区、多少行、每行的内容是什么,都有数据模型层来决定,而不是写死的。

                                      <2>灵活使用TableView

                                               a.两个TableView使用相同的数据源

                                               b.两个TableView使用不同的数据源

                                               c.两个TableView使用不同的委托对象

                                     

 

 

 

1.UITabBarController(标签控制器)

         1.1 是什么

                   类似于UINavigationConroller,也是一个控制器的控制器,经常看见的UITabBarController表现为UITabbar。(类似于NavigationController的UIToolBar)

         1.2 如何使用

                   创建UITabBarController对象,.viewControllers =@[vc1,vc2,vc3,vc4];

                   如果多出4个以下的视图控制器,会自动在Tabbar上生成一个More视图。

         1.3 重要的属性

                   设置VC的属性:(VC初始化的时候使用)

                            .title 文字

                            .tabBarItem 图片 默认是以单色显示

                            显示上的不同的内容

         1.4 NavigationController和TabBarController一起使用

                   window->TabBarController->NavigationController->TableViewController->ViewController

 

2.UICollectionViewController

         2.1 是什么

                   是一个展示大量数据的控制器,功能几乎与UITableViewController差不多,其实是UITableViewController的变种,是正真的二维表(多行多列)。

                   ios6以后支持的,用于展示视图、布局更加灵活,用法类似TableViewController。

         2.2 使用

                   使用方式与UITableViewController

         2.3 不同点

                   <1>UICollectionView是多行多列

                   <2>UICollectionView中的Cell一般需要"自定义"

                            UICollectionViewCell中没有定义

                                      .textLabel

                                      .detailLabel

                                      .imageView等属性都没有,所以需要自定义。

                  

                   分析:

                            tableView—属性—tableViewController

                            显示                              UITableViewDataSource—方法

                            操作                              UITableViewDelegate—方法

         2.4 实现步骤

                   (1)创建一个VC(UIViewController)

                   (2)拖拽CollectionView到VC中(委托对象)

                   (3)设置被委托对象

                            <1>遵守协议

                                      UICollectionViewDataSource

                                      UICollectionViewDelegate

                            <2>实现方法

                                      numberOfSectionsInCollectionView

                                      numberOfItemsInSection

                                      cellForItemAtIndexPath

                            <3>委托对象与被委托建立关联

                            <4>自定义Cell(参考自定义TableViewCell)

                                      a.创建一个类(UICollectionViewCell)

                                      b.创建相应的xib文件(并自定义中的内容)

                                               注:xib中的Cell与自定义的类进行关联

                                                                    xib中的label应该是自定义的类属性(IBOutlet)

                                      c.在CollectionView第三问中,使用自定义Cell。

                                                (1)先注册 (2)再从队列中取出来并赋值

                   2.5 重要的属性

                            Cell Size:设置Cell的大小

                            Header/Footer Size:设置分区头/尾的大小

                            Min Spacing:设置Cell对象间(横)/行(竖) 间隔距离

                            Section Insets:内边距,Cell对象与边的距离,上、下、左、右。

                   2.6 CollectionView 可以布局类,进行布局,使用UIKit提供的布局(UICollectionViewFlowLayout),也可以自定义布局。

                   2.7CollectionView的一些常用属性

                            layout:Flow/Custom

                                      如果选择Flow,Cell一个挨一个。

                                      如果选择custom,需要指定一个布局类,此类一定是自定义的,并且继承UICollectionViewLayout。

                            ScrollDirection:滚动的方向,默认是垂直,也可以是水平的。

                            CollectionView是UIScrollView的子类,所以有PagingEnabled属性。

                   2.8 布局

                            <1>是什么

                                      CollectionView是布局的精髓,相当于CollectionView的大脑和中枢,负责设置CollectionView的一些属性。

                                      位置、尺寸、透明度、层级关系、形状...

                            <2>本质

                                      本质就是对象,UICollectionViewLayout类的子类对象。

                                      UIKit提供了一个布局类:                                        UICollectionViewFlowLayout:  UICollectionViewLayout,流式布局,一个挨一个。

                            <3>***自定义布局

                                      写一个类,继承自UICollectionViewLayout或继承UICollectionViewFlowLayout,创建此类的对象,设置为collectionView的布局属性即可。

3.其它控件

         3.1 UISegementedControl 分段控制选择

                   允许用户在多个分段中做出选择。

                   重要属性:

                            selectedSegmentIndex按钮的索引

                   重要事件:

                            valueChanged

         3.2 Activity Indicator 活动指器

                   用来标识某个状态,活动或者空闲。

                   重要方法:

                            A.开始动画

                                      startAnimating

                            B.停止动画

                                      stopAnimating

         3.3 ProgressView 进度条

                   用来显示任务的状态,文件下载的进度或邮件的读取速度。

                   重要属性:

                            .progressTintColor 进度条颜色

                            .tractTintColor 底颜色

                            .progress 值0.0~1.0 之间

                   备注:

                            NSTimer定时器

                                      参数1:间隔时间 单位/秒

                                      参数2:通知哪个对象

                                      参数3:发送什么消息

                                      参数4:nil

                                      参数5:是否重复执行

                                      NSTimer*timer = [NSTimer scheduledTimerWithInterval:1 target: select: userInfo:repeats:]

                            [timer invalidate];停止定时器的继续执行

         3.4 UITextView 多行文本框

                   继承了UIScrollView,是一个可滚动的多行视图文本区域,可以格式化并且可以编辑。

                   重要属性:

                            .text 文本框的内容

                            .textColor 里面的字体颜色

                            .delegate 代理对象

                            .returnKeyType 返回按钮的类型

                            .scrollEnabled = YES是否可以拖动滚动条

                   重要方法:

                            … 参照 UITextField

         3.5 DatePicker   日期选择器

                   重要属性:

                            .date 得到选中的日期对象

                                                         (UTC时间 NSDateFormatter)

                            .locale = [NSLocalealloc]initWithLocaleIdentifier:@"zh_CN"];

                   重要方法:

                            valueChanged

         3.6 PickerView 视图选择器

                   允许用户从滚轮控件中选择数据,与TableView相似。

                   (1)数据源 UI……datasource…

                            数据源负责计算UIPickerView有多少列(滚轮的个数)、多少行(滚轮中数据的个数)。

                            返回总的列数:

                            返回总的行数:

                   (2)事件方法(Delegate)UI……delegate…

                            <1>第component列第row行显示样的View。(NSString)

                            <2>选择某一行时触发该事件方法

                            <3>返回component列每一行的高度

        

                            刷新某一列数据

                            [pickerViewreloadCompnent:1];

                  

 

1.WebView 网页视图(浏览器控件)

                   可以实现一个Web浏览器,可以实现加载静态html,动态URL地址,可以实现网页导航,以及调用JavaScript等。

                   重要方法:

                   [self.myWebViewloadHTMLString:…. baseURL:nil];

2.UISearchBar搜索控件

         按照指定要求 查找相应内容,通常与TableView结合使用。

        

         2.1 谓词(NSPredicate)(正则表达式)

                   (1)是什么

                            用于定义一个逻辑判定,判定结果是一个BOOL。

                   (2)干什么

                            作为if语句的条件和数据筛选。

                   (3)使用

                            通过使用predicateWithFormat:来创建一个谓词对象。

         2.2 搜索控件

                   实现步骤:

                            (1)搜索框的输入问题 UISearchBarDelegate

                            (2)将输入的内容要与模型层的数据进行筛选

                                      谓词

                            (3)将符合条件的数据保存下来

                                      遍历模型层 将符合条件的数据,保存起来

                            (4)将它显示在TableView中

3.UISearchBar+UISearchDisplayController

                   3.1 是什么

                            搜索显示控制器,继承于NSObject,非视图控制器,一个工具类。

                   3.2 干什么用

                            提供控制一个SearchBar和一个搜索结果tableView。

                            searchBar需要创建,添加到指定的视图,提供给搜索控制器。

                            搜索结果由tableView(由搜索控制器创建的)显示,需要指定delegate和datasource。

                            设置代理(委托)对象,实现委托协议中方法。

                   3.3 使用步骤

                            (1)创建一个TableView并显示

                            (2)拖拽一个searchBar

                                      设置searchBar在被代理对象

                                               得到筛选后的结果

                            (3)UISearchDisplayController

                                      设置了***显示结果TableView的dataSource、delegate

                                      将searchBar得到的筛选后的结果,显示在TableView2(UISearchDisplayController提供的TableView)中吧。

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值