三、自定义视图、视图控制器

1.自定义视图

  • 自定义视图:系统标准UI之外,自己组合而出的新的视图。

在实际开发中,我们经常需要自己定义视图,积累自己的代码库。自己封装的视图,能像系统提供的UI控件一样用于多个项目中,这样可以提高我们的开发效率。

自定义视图的步骤:

根据需求的不同,自定义视图继承的类也会不同。一般自定义的视图会继承自UIView。以下是自定义视图的要点:

  1. 创建一个UIView子类
  2. 在类的初始化方法中添加子视图
  3. 类的.h文件提供了一些接口(方法),便于外界操作子视图。

示例1: 自定义label-textField视图

假设我们使用LTView类代表label-textField视图,我们可以创建一个LTView类继承于UIView。将UIView作为一个容器,在LTView的初始化方法中创建并添加label和textField。

将Label和TextField封装到LTView中,在一定程度上简化了我们的代码。在自定义LTView中我们使用了复合设计模式。

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

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

2. 视图控制器

UIViewController : 视图控制器,控制视图显示,响应事件。分担AppDelegate的工作。实现模块独立,提高复用性。

视图控制器的功能:(1)控制视图大小变换、布局视图、响应事件。(2)监测以及处理内存警告。(3)检测以及处理屏幕旋转。(4)检测视图的切换。

自定义视图控制器:

1> 定义UIViewController的子类
2> 创建视图控制器对象,作为window的根视图控制器
3> 在viewDidLoad中使用创建好的对象view

3. 视图控制器指定自定义的view

UIViewController自带一个空的view,与需求不符合。视图控制器只负责控制视图显示和响应事件。

自定义View

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

2> 重写controller的loadView方法。创建自定义视图对象,并指定为controller的view。

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

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

4. MVC概述

MVC是一个框架级的设计模式。M是Model,主要用于建立数据模型(即数据的结构)。V是View,我们看到的所有控件都是view,view的主要功能是展示数据。C是控制器,主要是控制M和V之间的通信。

5. 检测屏幕旋转

视图控制器本身能检测到屏幕的旋转,如果要处理屏幕旋转,需要重写几个方法:
(1)supportedInterfaceOrientations (设置设备支持旋转的方向)

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

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

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

视图处理

视图控制器会自动调整view的大小以适应屏幕的旋转,bounds被修改,触发view的layoutSubviews方法。view重写layoutSubviews方法,根据设备方向重新布局。

[UIApplication shareApplication].statusBarOrientation 方法可以提供设备的当前方向。

6. 处理内存警告

控制器能监测内存警告,以便我们避免内存不够引起的crash。在定义的controller子类中重写didReceiveMemoryWarning方法。释放暂时不使用的资源。(数据对象、图像)

7. 容器视图控制器

常用方法:

self.view显示:viewWillAppear:和viewDidAppear:

self.view消失:viewWillDisappear:和viewDidDisappear:

self.view添加到父视图上时,之行appear方法;当self.view从父视图上移除时,执行disappear方法。

转载于:https://www.cnblogs.com/CoderLiLe/p/5538528.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序如何在两个gpu卡上并行运行_深度学习分布式训练相关介绍 - Part 1 多GPU训练...

本篇文章主要是对深度学习中运用多GPU进行训练的一些基本的知识点进行的一个梳理文章中的内容都是经过认真地分析,并且尽量做到有所考证抛砖引玉,希望可以给大家有更多的启发,并能有所收获介绍大多数时候,梯度下降算法的训练需要较…

集成Spring和JavaServer Faces:改进的模板

随着2.0版的发布&#xff0c;Facelet模板成为JSF规范的核心部分。 使用<ui&#xff1a;composition>和<ui&#xff1a;decorate>标记&#xff0c;可以轻松构建复杂的页面&#xff0c;同时仍保持标记清晰。 模板在创建HTML表单时特别有用&#xff0c;但是不幸的是&a…

whmcs模板路径

whmcs网站根目录 比如你的域名是server.nongbin.vip&#xff0c;你需要cd /home/wwwroot/server.nongbin.vip&#xff0c;该目录下然后&#xff0c;cd template/ 给文件夹下就是你上传的模板文件夹转载于:https://www.cnblogs.com/nongbin/p/6412108.html

系统英伟达gpu驱动卸载_绕过CPU,英伟达让GPU直连存储设备

英伟达最近发布了一个新的GPUDirect Storage&#xff0c;暂且叫做GPU直连存储&#xff0c;让GPU直接连到NVMe存储设备上。这一方案用到了RDMA设备来把数据从闪存存储转移到GPU本地的内存里&#xff0c;无需经过CPU还有系统内存。如果这一举措顺利的话&#xff0c;英伟达就能摆脱…

37、EnumSet详解

EnumSet类也是有顺序的&#xff0c;EnumSet按照枚举值在Enum类内定义的顺序决定集合元素的顺序 EnumSet在内部已位向量的形式存储&#xff0c;这种存储方式非常紧凑、搞笑&#xff0c;因此EnumSet占用内存很小&#xff0c;而且运行效率很好。 EnumSet集合不允许加入null元素 En…

嘲弄和存根–了解Mockito的测试双打

介绍 我遇到的一件事是使用模拟框架的团队假设他们在模拟。 他们并不知道Mocks只是Gerard Meszaros在xunitpatterns.com上归类的“测试双打”之一。 重要的是要意识到每种类型的测试双精度在测试中都扮演着不同的角色。 用与您需要学习不同模式或重构的方式相同&#xff0c;您…

numpy 辨异(三)—— hstack/column_stack,linalg.eig/linalg.eigh

1. np.hstack np.column_stack >>> np.hstack([np.array([1, 2, 3]), np.array([4, 5, 6])]) array([1, 2, 3, 4, 5, 6])>>> np.column_stack([np.array([1, 2, 3]), np.array([4, 5, 6])]) array([[1, 4],[2, 5],[3, 6]]) 当然对等地&#xff0c;也存在&…

【代码笔记】iOS-首页3张图片变化

一&#xff0c;效果图。 二&#xff0c;工程图。 三&#xff0c;代码。 RootViewController.h #import <UIKit/UIKit.h>interface RootViewController : UIViewController {NSTimer *timer;UIImageView *imageView1;UIImageView *imageView2;UIImageView *imageView3;UIV…

acwing算法提高之动态规划--数位DP

目录 1 基础知识2 模板3 训练 1 基础知识 暂无。。。 2 模板 暂无。。。 3 训练 题目1&#xff1a;度的数量。 解题思路&#xff1a;分类讨论。 C代码如下&#xff0c; #include <iostream> #include <vector>using namespace std;const int N 35; int K,…

python 输入数字变成密码_如何在python中检查数字的“密码”

我建议使用sets和stdlib中的string包作为可接受字符的列表。在我还建议进行一点重构&#xff0c;以删除大量带有if / else分支的嵌套。在import stringupper set(list(string.uppercase))lower set(list(string.lowercase))numbers set(list(string.digits))while True:npw …

使用Eclipse在Amazon Ec2中部署Java Web应用程序的完整指南

嗨&#xff0c;读者们&#xff0c; 今天&#xff0c;我将向您展示如何使用Eclipse IDE在Amazon EC2中部署简单的Java Web应用程序。 在我们开始之前&#xff0c;我们需要一些必需的东西&#xff0c; Eclipse Java EE IDE –您可以从http://www.eclipse.org/downloads/下载&…

jquery的load方法

load方法指定一个界面会显示在目标的标签内部 比如MVC的一个分部视图页面想要显示在某个标签里面&#xff0c;可以写成 $(标签ID).load&#xff08;分部视图名称,data&#xff09; 其中第二个参数可选&#xff0c;主要是一些需要传递到该页面的数据JSON格式组成&#xff0c;发送…

android 录音原始文件_音频采集:Android基于AudioRecord的实现

前言这篇文章简单介绍下移动端Android系统下利用AudioRecord进行音频采集方法。按照惯例开始前先提供一份源码 AudioRecordLib 。AudioRecord采集的核心实现在于 AudioRecordCore.java 这个文件。权限申请想要使用AudioRecord这个API&#xff0c;需要在AndroidManifest.xml的配…

Spring 3和Java EE 6 –不公平和不完整的比较

这篇小文章的初稿标题为“ Spring&#xff06;Java EE –比较苹果和橙子”。 在撰写本文时&#xff0c;我了解到可以比较Spring Framework和Java EE&#xff0c;但这始终是不公平且不完整的工作。 Java for Enterprise和Spring Framework的发展紧密地联系在一起。 两者相互依存…

xml配置文件推荐方式

1.XML帮助类 /// <summary>/// Xml帮助类/// </summary>public class XmlHelper{/// <summary>/// 保存xml/// </summary>/// <typeparam name"T"></typeparam>/// <param name"path"></param>/// <p…

AFNetWorking https SSL认证

一般来讲如果app用了web service , 我们需要防止数据嗅探来保证数据安全.通常的做法是用ssl来连接以防止数据抓包和嗅探 其实这么做的话还是不够的 。 我们还需要防止中间人攻击&#xff08;不明白的自己去百度&#xff09;。攻击者通过伪造的ssl证书使app连接到了伪装的假冒的…

查看环境列表_Xfce 4.14桌面环境正式发布,想要图形界面又想节省内存?就它了...

1. Xfce 4.14桌面环境正式发布&#xff0c;它有什么新特性&#xff1f;本文主要讲解Xfce 4.14桌面环境正式发布&#xff0c;它有什么新特性。Xfce已经开发了4年多&#xff0c;但是这个周末终于看到了期待已久的Xfce 4.14的发布。Xfce 4.14是这个轻量级桌面环境的最新稳定版本&a…

使用Log4jdbc记录JDBC操作

当我们开发任何应用程序&#xff0c;完成它或结束其任何模块时&#xff0c;我们都会开始优化过程。 大多数应用程序都包含数据库访问权限&#xff0c;并且如果您使用的是ORM &#xff0c;则可能会使用hibernate 。 优化休眠持久层&#xff0c;要求准备阅读&#xff0c;理解和评…

android BluetoothAdapter蓝牙BLE扫描总结

做室内定位的程序员应该都知道&#xff0c;在Android 5.0之后&#xff0c;google推出了蓝牙扫描新接口&#xff0c;我们在实测中发现出一些问题&#xff0c;现在给大家列出&#xff0c;以供参考&#xff1a; 1.android 4.3.1(Build.VERSION_CODES.JELLY_BEAN_MR2)增加的startLe…

卷积神经网络语音识别_用于物体识别的3D卷积神经网络

本文提出了一种基于CNN的3D物体识别方法&#xff0c;能够从3D图像表示中识别3D物体&#xff0c;并在比较了不同的体素时的准确性。已有文献中&#xff0c;3D CNN使用3D点云数据集或者RGBD图像来构建3D CNNs&#xff0c;但是CNN也可以用于直接识别物体体积表示的体素。本文中&am…