Fork me on GitHub

UI第三讲.自定义视图 视图控制器 检测屏幕旋转

一.自定义视图 (自定义label-textField视图)

   目的:为了进一步优化登录界面,提高代码的精简程度和复用性,可移植性,从而需要在原有视图控件的基础之上自由组合成自定义视图.

 
   一般自定义的视图会继承于UIView。以下是自定义视图的要点和步骤:
                  1、创建一个UIView子类

                  2、在类的初始化方法中添加子视图

                  3、类的.h文件提供一些接口(方法),便于外界操作子视图。

 

例子及相应代码:
      练习题1:假设我们使用LTView类代表label-textfield视图。创建一个LTView类继承于UIViewLTView作为一个容器,在LTView的初始化方法中创建并添加 labeltextField此时的LTView就变成了一个具有labeltextField的视图了。
 
 

 执行顺序及思路:1.创建一个LTView类继承于UIView  

                2.将LTView作为一个容器,在LTView的初始化方法中创建并添加 label和textField。(作为其属性添加到LTView中) LTView就变成了一个具有label和textField的视图了.

                3.调用时引入AppDelegate中,并初始化创建及显示

 

 

 Appdelegate.m文件(创建文件一同显示)

 

 

 创建的LTView.h 进行声明

 

 

 在LTView.m中初始化,并通过方法创建其下属的标签和文本框

 

 

效果图

 

 

小结:自定义LTView使用了一种设计模式:复合设计模式。

     复合设计模式:A类中,使用B类(或者更多类)作为自己的成员(实例变量)。

     iOS中复合是特别常见的设计模式。iOS新控件往往都是用已有控件组合而成的。

 

 

 

二.视图控制器(UIVeiwController)

 

 mvc概述

       UIViewControllerMVC设计模式的核心。 MVC是一个框架级的设计模式。
       MModel,主要用于建立数据模型(即数据的结构)
       VView,我们能看到的所有控件都是view,view主要的功能是展示数据。
       C是控制器,主要是控制MV的通信。视图控制器是连接Model和View的桥梁

  UIViewController(视图控制器)作用:控制视图显示,响应事件.

                 分担AppDelegate的工作.
                 实现模块独立,提高复用性.

 

 

 

 

 

练习2:
    自定义视图类LoginView,添加子视图UILabel,UITextField,UIButton

     重写controllerloadView方法,创建LoginView对象,指定为controllerview,并设置label显⽰示为用户名,textField的代理,button的点击事件。

     controller实现textField的代理方法,实现:点击return键回收键盘。

     controller实现button的点击事件⽅方法,实现:NSLog输出。

 

 

示例代码:(学会代码的分离使用,delegate,view,controller三者的分离)

 

 AppDelegate.h文件(主要用于用创建的视图控制器取代原有的根视图控制器)

 

 

 

 

 

 chViewController.m文件

(1.完成视图控制器的初始化 2.重写loadview方法完成view的替换 3.在viewDidLoad中操作按钮点击事件和代理 4.可以实现自定义方法)

 

 

在view的.h中将label,textField,button变成子类

 

 

 

 在LoginView.m中(1.完成初始化 2.在方法中创建label,textField,button)

 

 

 

效果图:(此例题的主要是1.学会如何用代码分离的形式书写,代理只负责代理,view只负责视图相关的展示,视图控制器只负责相关的实现  2.实现按钮点击事件,用代理形式回收键盘)

 

 

 

 

 注意:mvc的代码分离书写格式要掌握以后经常用,代码的书写位置确定,同时对于按钮点击事件要掌握.

 

 

 

三.Controller和屏幕旋转

 

 示例代码:

练习3:

1.将一个view1声明为另一个view的子类进行调用,并在view中添加按钮等,通过这种形式调用

2.实现屏幕的旋转,同时根据横屏竖屏调整相应视图位置

 

AppDelegate.m文件(只完成视图控制器的替换)

 

 

 

 LoginView.h文件(在其中添加按钮等)

 

 

 

 在LoginView.m(上)进行初始化并且实现按钮创建

 

在LoginView.m(下)同时将对应按钮的点击事件也写在这里了(也可以写在controller中)

 

 在lView.h中将上一个为引入其中进行调用

 

 

 

 在lView.m文件中调用上一个view的方法,并完成创建,横屏竖屏的判断选择也在其中

 

 zailoginViewController.m(视图控制器)中进行初始化和加载

 在视图控制器中完成屏幕旋转操作及点击事件

 

 

 

 注意:重要的是要理清思路,然后多敲

附件:练习题完整代码

 

posted @ 2015-09-09 19:46  DengHuiCheng  阅读(386)  评论(0编辑  收藏  举报