zoukankan      html  css  js  c++  java
  • iOS-基础控件-视图控制器

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

    采用:复合设计模式

    自定义视图优点:

    1.iOS提供了很多UI组件,借助它们我们可以实现不同的功能。尽管如此,实际开发中,我们需要自定义视图。积累自己的代码库,方便开发。自己封装的视图,能像系统UI控件一样,用于别的项目中,能大大降低开发成本,提高开发速率。

    2.高质量代码的特点:可复用,可移植,精炼等(高内聚,低耦合)

    AppDelegate.m中:

    LTView.h中:

    LTView.m中:

    RootView.m中:

    二.视图控制器

    1.视图控制器是应用程序数据和视图之间的重要桥梁,每个iOS应用程序只显示一个用户界面,显示的内容是由控制器或一组视图控制器协调管理。所以,视图控制器提供了一个基本的框架来构建应用程序。

    2.UIViewController是所有视图控制器的父类

    3.iOS提供了许多内置的视图控制器,以支持标准的用户界面部分,比如导航控制器(UINavigationController),标签控制器(UITabBarController),表视图控制器(UITableViewController)等。

    功能:

    1.控制视图大小变化,布局视图,响应事件

    2.检测以及处理内存警告

    3.检测以及处理屏幕旋转

    4.检测视图的切换

    5.实现模块独立,提高复用性

    三.视图控制器指定视图

    自定义视图

    1.自定义视图类继承UIView。在初始化方法中添加子视图控件

    2.重写controller的loadview方法。创建自定义视图对象,并制定为controller的view(注意:loadView方法在控制器的view为nil的时候别调用,用于以编程的方式创建view的时候用到。loadView是使用代码生成视图的时候,当视图第一次载入的时候调用的方法,用于使用写代码来实现控件)

    3.将子视图控件对象设置为自定义视图类的属性,在viewDidLoad方法中进行设置:添加action,设置delegate等等

    4.在controller中添加按钮点击事件实现和代理方法的实现

    四.MVC

    1.UIViewController是MVC设计模式的核心

    2.MVC是一个框架级的设计模式

    3.M是model,主要用于建立数据模型(数据的结构)

    4.V是View,我们能看到的所有控件都是view,view的主要功能是显示数据

    5.C是controller,主要是控制M和V的通信

    五.屏幕旋转

    方向:

    视图控制器本身能检测到屏幕的旋转,如果要处理屏幕旋转,需要重写几个方法:

    1.supportedInterfaceOrientation(设置设备支持旋转的方向,如果不添加,视图控制器将无法检测屏幕的旋转)

    2.willRotateToInterfaceOrientation:duration(暂停音乐,关闭视图交互等)

    3.willAnimateRotationToInterfaceOrientation : duration(添加自定义动画等)

    4.didRotateFromInterfaceOrientation: (播放音乐,打开视图交互等)

    视图的处理:

    1.注意视图控制器会自动调整view的大小以适应屏幕旋转,bounds被修改,触发view的layoutSubviews方法

    2.view重写layoutSubviews方法,根据设备方向,重新布局

    3.[UIAppication shareApplication].statusBarOrientation提供设备当前方向

    六.内存警告

    内存警告来源:手机内存80M,程序运行过程中内存接近80M时程序会为每一个视图控制器发送内存警告消息。

    如何处理:

    1.控制器能检测内存警告,以便我们避免内存不够引起的crash

    2.在定义的controller子类中重写didReceiveMemoryWarning方法

    3.释放暂时不使用的资源

    - (void) didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    //根视图已经加载过,根视图未显示

    if([self isViewLoaded] == YES && self.view.window == nil) {

    //将根视图销毁,目的是再次进入时能够重新加载调用viewDidLoad函数

    self.view = nil;

    }

    }

  • 相关阅读:
    with 上下文协议
    __del__
    描述符使用
    理解并发(Concurrency)和并行(Parallelism)
    理解ThreadLocal
    理解死锁的概念(实例)
    遇到的几种设计模式的应用
    面试题02
    操作 mysql练习14-16题
    mysql练习11-13题
  • 原文地址:https://www.cnblogs.com/zhoulina/p/5554120.html
Copyright © 2011-2022 走看看