【IOS 开发学习总结-OC-41】★★ios开发——代码控制 UI 界面与 UI 控件的自定义
2015-10-11 10:38
776 查看
代码控制界面与故事板或 xib 文件 控制界面的本质是一样高的:都是把 UI 控件作为一个积木块,然后把它们组合起来。
提示说明:
纯代码的方式开发 IOS 应用 并不是最好的开发方式——开发步骤繁琐,而且,是所有创建程序界面的代码都有应用 程序 委托对象的方法负责完成,这并不符合 MVC 设计原则——这不利于程序组件的解耦。
创建 UI 控件,比如创建 UILabel,UIButton 等;
调用
多次调用 UI 控件的 setter 方法来设置 UI 控件的外观和行为。
基于这样的原理,我们就可以开发项目中需自定义的控件了——ios 提供的控件不满足需要时,我们可以通过继承UIView来派生自定义控件。
UI控件概述:
ios 所有的 UI 控件都继承 UIView, 而 UIView 呢,继承了 UIResponder基类,UIResponder代表用户操作的响应者。
UI 控件大体可分为3类:
①:活动控件——可以与用户交互,大部分活动控件都继承了 UIControl 基类(关于UIControl,会在以后的文章中进行总结),用户操作控件时激发相应的事件——该事件激发该控件上为该事件绑定的事件处理方法。如 UIButton;
②:静态控件——只是继承了UIView,不继承UIControl。该类控件只是用来显示应用状态,用户不能对静态控件执行任何操作。如 UILbel;
③:被动控件——可接受用户操作,但通常仅用于接受用户输入的值。——这些控件不会激发 IBAction 方法。比如文本框控件;
tips: 这里的 UI控件所属的角色并不是一成不变的,有些控件可根据需要选择多种模式。
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
提示说明:
纯代码的方式开发 IOS 应用 并不是最好的开发方式——开发步骤繁琐,而且,是所有创建程序界面的代码都有应用 程序 委托对象的方法负责完成,这并不符合 MVC 设计原则——这不利于程序组件的解耦。
有父容器后要写的三段代码
一旦程序有了 UIView 作为容器,接下来的代码只有3部分或者说3段(归纳的说法),哪3部分呢?:创建 UI 控件,比如创建 UILabel,UIButton 等;
调用
addSubView:方法将 UI 控件添加到其他容器中;
多次调用 UI 控件的 setter 方法来设置 UI 控件的外观和行为。
自定义UI 控件
IOS 的其他 UI 控件都继承了 UIView,UIView 控件只是一个矩形的空白区域。这些 UI 控件都是在 UIView提供的空白区域上绘制外观。基于这样的原理,我们就可以开发项目中需自定义的控件了——ios 提供的控件不满足需要时,我们可以通过继承UIView来派生自定义控件。
UI控件概述:
ios 所有的 UI 控件都继承 UIView, 而 UIView 呢,继承了 UIResponder基类,UIResponder代表用户操作的响应者。
UI 控件大体可分为3类:
①:活动控件——可以与用户交互,大部分活动控件都继承了 UIControl 基类(关于UIControl,会在以后的文章中进行总结),用户操作控件时激发相应的事件——该事件激发该控件上为该事件绑定的事件处理方法。如 UIButton;
②:静态控件——只是继承了UIView,不继承UIControl。该类控件只是用来显示应用状态,用户不能对静态控件执行任何操作。如 UILbel;
③:被动控件——可接受用户操作,但通常仅用于接受用户输入的值。——这些控件不会激发 IBAction 方法。比如文本框控件;
tips: 这里的 UI控件所属的角色并不是一成不变的,有些控件可根据需要选择多种模式。
自定义 UI 控件可被重写的方法
当我们打算派生自己的 UI 控件时,首先定义一个继承 View 基类的子类,然后重写父类的方法。通常可被重写的方法如下:1.
-(instancetype)initWithFrame:(CGRect)frame:创建 UI 控件时常会调用该方法执行初始化,如果对 UI 控件执行一些额外的初始化 ,可重写该方法;
2.
-(instancetype)initWithCoder:(NSCoder *)aDecoder:通过 nib 文件加载完该控件后会自动调用该方法。——如果程序需要在 nib 文件中加载 该控件后执行自定义初始化,则可通过重写该方法来实现。
3.
-(void)drawRect:(CGRect)rect:重写该方法,重新绘制该控件的内容;
4.
-(void)layoutSubviews——重写可实现对该控件包含的子控件布局进行更精确的控制;
5.
-(void)didAddSubview:(UIView *)subview——添加子控件完成时激发该方法;
6.
-(void)willRemoveSubview:(UIView *)subview——将要移除子控件时激发该方法;
7.
-(void)willMoveToSuperview:(UIView *)newSuperview——将要添加到父控件中时激发该方法;
8.
-(void)didMoveToSuperview——已经添加到父控件中时激发该方法;
9.
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event——用户手指开始触碰该控件时,将激发该方法;
10.
-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event——手指在控件上移动时,将会激发该方法;
11.
-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event——手指结束触碰控件时,将会激发该方法;
12.
-(void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event——用户取消触碰该控件,会激发该方法。
实例——随手指运动的小球:
代码资源下载:随手指运动的小球DEMO相关文章推荐
- android 代码实现控件之间的间距
- GUI - Web前端开发框架
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- [Android]在代码里运行另一个程序的方法
- 评价ui设计作品好坏的八个标准(界面/交互设计研究)
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- 肯特·贝克:改变人生的代码整理魔法
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 网页恶意代码的预防
- 高手写的Tracer-Flash代码调试类代码下载
- CSS代码缩写技巧
- 非主流Q-zOne代码代码搜集第1/2页
- CreateWeb.vbs 代码
- Lua中编译执行代码相关的函数详解
- 更有效率的css代码编写第1/3页
- 为Yahoo! UI Extensions Grid增加内置的可编辑器