《iOS 6核心开发手册(第4版)》——2.1节UIControl类

简介:

本节书摘来自异步社区《iOS 6核心开发手册(第4版)》一书中的第2章,第2.1节UIControl类,作者 【美】Erica Sadun,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.1 UIControl类
iOS 6核心开发手册(第4版)
在iOS中,控件(control)指为用户界面设计的预建对象库的成员。控件包括按钮和文本框、滑块和选项开关,以及其他Apple提供的对象。控件的作用是把用户交互转换为回调。用户触摸和操纵控件,并以此与应用程序通信。

UIControl类位于控件类树的根部。控件是UIView的子类,它们都继承它的所有用于显示和布局的属性。子类添加了一种响应机制,用于增强视图的交互性。

当用户与控件的界面交互时,所有的控件都会实现一些方式来发出消息。控件使用目标—动作模式发送消息。在定义新控件时,将告诉它谁接收消息(目标(target)),要发送什么消息(动作(action)),以及何时发送那些消息(触发条件,比如用户在其界限内完成触摸)。

2.1.1 目标—动作
目标—动作设计模式提供了一种响应用户交互的低级方式。对于UIControl类的几乎所有的子类,都会遇到这种设计模式。利用目标—动作设计模式,当特定的用户事件发生时,可以告诉控件向给定的对象发送一条消息。例如,可以指定当用户按下按钮或者调整滑块时哪个对象接收选择器。

可以提供任意一个选择器。编译器不会在运行时检查选择器,因此在准备代码时要小心谨慎地使用它。下面的代码段使用一个目标—动作对,当用户在按钮内释放一个触摸动作时,它将调用playSound:选择器。如果目标(self)没有实现该方法,应用程序将由于未定义的方法调用错误而会在运行时崩溃:

[button addTarget:self action:@selector(playSound:)
      forControlEvents:UIControlEventTouchUpInside];

目标—动作不像委托那样依赖于建立好的方法库。与委托以及它们必需的协议不同,目标—动作设计模式不保证playSound:实现存在。它取决于开发者确保回调引用现有的方法。谨慎的程序员将在利用给定的选择器分配目标—动作对之前测试目标。下面给出了一个示例。

if ([self respondsToSelector:@selector(playSound:)])
     [button addTarget:self action:@selector(playSound:)
           forControlEvents:UIControlEventTouchUpInside];

标准的UIControl目标—动作对总是传递0个、1个或两个参数。这些可选的参数可以提供交互对象(比如操纵的按钮、滑块或选项开关)和响应用户输入的UIEvent对象。选择器可以选择传递其中的任何或所有参数。在前面的示例中,选择器使用一个参数,即敲击的UIButton实例。这个自引用(其中利用调用包括触发的对象)允许构建更一般的动作代码,它知道哪个控件产生回调。

2.1.2 控件的种类
系统提供的UIControl家族的成员包括按钮、分段控件、选项开关、滑块、页面控件和文本框。其中每个控件都可以在Interface Builder的Object Library中找到(按下Command+Control+Option+3组合键,或者选择View | Utilities | Show Object Library命令,并选择Controls),如图2-1所示。


242494871ae7620181741feb3e7483adba30b357

图2-1 Interface Builder在Object Library中提供了其可用的控件。
从左到右依次是:标签(UILabel)、按钮(UIButton)、分段控件(UISegmentedControl)、
文本框(UITextField)、滑块(UISlider)、选项开关(UISwitch)、活动指示器和进度指示器
(UIActivityIndicatorView和UIProgressView,从技术上讲它们不是控件)、页面控件
(UIPageControl)和步进器(UIStepper)

2.1.3 控件事件
控件主要响应3类事件:基于触摸的事件、基于值的事件和基于编辑操作的事件。表2-1列出了可供控件使用的完整事件类型。


0b8de217f7e94e13d277cbee2d1628f0e7c9537e


1098e3a8316275748a1904a8d4d22a50e3890ea2

一般来讲,事件分解路线图如下:按钮使用触摸事件;几乎所有的按钮交互都是由单个UIControlEventTouchUpInside事件引起的,并且它是Interface Builder(IB)连接创建的默认事件。值事件(例如,UIControlEventValueChanged)响应用户发起的对分段控件、选项开关、滑块和页面控件的调整。用于表格的刷新控件也会触发值事件。当用户切换、滑动或敲击那些对象时,控件值会改变。UITextField对象会触发编辑事件。用户通过敲击进入(或移出)文本框或者更改文本框的内容来引发这些事件。

与所有的iOS GUI元素一样,可以在Xcode的Interface Builder屏幕中布置控件或者在代码中实例化它们。本章讨论了一些IB方法,但是更关注的是基于代码的解决方案。一旦掌握了IB布局,它将会保持相同,而不管涉及的项目是什么。可以把一个对象放入界面中,利用检查器自定义它,并把它连接到其他IB对象。

相关文章
|
测试技术 程序员 C++
iOS:项目中无用类检测和无用图片检测汇总
在涉及到项目大改版,或者涉及到某个功能模块大变更,就会涉及到图片废弃和文件废弃的情况。 但是这时候就会遗留下一个很大的问题,没有将废弃的、无用的文件类或资源删除干净。而这次需要对工程代码的无用资源和无用文件进行删除处理,感触颇多,故在此笔记。 首先,感觉很多人的代码习惯还是恶待提高。比如我发现一些人的代码操作习惯,从好到次,可以大略分以下情况
1125 0
iOS:项目中无用类检测和无用图片检测汇总
|
缓存 安全 Linux
自建iOS构建流水线建设核心原理剖析
文章主要从iOS打包机远程构建的角度分析,整体链路脚本涉及的shell、ruby、security指令、xml以及iOS工程化相关知识,文章通过一个远程构建流程简单并重点的讲解了如何规避本地打包环境下的小的修改出包存在的大量人工操作,如何动态化配置证书、版本号等信息以及内测分发方式的避坑点。
自建iOS构建流水线建设核心原理剖析
|
设计模式 编译器 C++
iOS-底层原理 19:类扩展 与 关联对象 底层原理探索
iOS-底层原理 19:类扩展 与 关联对象 底层原理探索
116 0
iOS-底层原理 19:类扩展 与 关联对象 底层原理探索
|
存储 iOS开发
iOS-底层原理 18:类的加载(下)
iOS-底层原理 18:类的加载(下)
110 0
iOS-底层原理 18:类的加载(下)
|
存储 缓存 算法
iOS-底层原理 17:类的加载(上)
iOS-底层原理 17:类的加载(上)
172 0
iOS-底层原理 17:类的加载(上)
|
存储 C++
iOS-底层原理 09:类 & isa 经典面试题分析
iOS-底层原理 09:类 & isa 经典面试题分析
140 0
iOS-底层原理 09:类 & isa 经典面试题分析
|
存储 编译器 C++
iOS-底层原理 08:类 & 类结构分析
iOS-底层原理 08:类 & 类结构分析
110 0
iOS-底层原理 08:类 & 类结构分析
|
存储 设计模式 编译器
iOS-底层原理 07:isa与类关联的原理
iOS-底层原理 07:isa与类关联的原理
98 0
iOS-底层原理 07:isa与类关联的原理
|
iOS开发 C++
iOS 类的加载分析 (中)
我们都知道iOS的整体机制是懒加载, 也是就是使用到, 再去加载, 不使用就释放掉来节省内存.
78 0
|
Java 程序员 C语言
【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法(一)
【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法(一)
108 0