本节书摘来自异步社区《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所示。


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

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



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

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

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

  1. 《iOS 6核心开发手册(第4版)》——2.11节秘诀:构建星星滑块

    本节书摘来自异步社区<iOS 6核心开发手册(第4版)>一书中的第2章,第2.11节秘诀:构建星星滑块,作者 [美]Erica Sadun,更多章节内容可以访问云栖社区"异步社区 ...

  2. 阿里 P9 开源分享内部 Java 核心开发手册(2022 版)覆盖 P5 到 P8

    这个世界唯一不变的就是变化, IT 圈子不外如是.计算机领域一直在改变,从基础框架到计算设备,还有几乎每天都涌现出的新技术.因此,作为一名程序开发人员,我们要通过不断的学习来提高自己的技能. 所以持续 ...

  3. 爱了,阿里P9开源分享内部Java核心开发手册(2022版)覆盖P5到P8

    这个世界唯一不变的就是变化, IT圈子不外如是.计算机领域一直在改变,从基础框架到计算设备,还有几乎每天都涌现出的新技术.因此,作为一名程序开发人员,我们要通过不断的学习来提高自己的技能. 所以持续学 ...

  4. 《iOS 6高级开发手册(第4版)》——1.11节秘诀:获取和使用设备姿势

    本节书摘来自异步社区<iOS 6高级开发手册(第4版)>一书中的第1章,第1.11节秘诀:获取和使用设备姿势,作者 [美]Erica Sadun,更多章节内容可以访问云栖社区"异 ...

  5. 《iOS 6高级开发手册(第4版)》——导读

    本节书摘来自异步社区<iOS 6高级开发手册(第4版)>一书中的目录,作者 [美]Erica Sadun,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 第 ...

  6. 《iOS 6高级开发手册(第4版)》——1.5节秘诀:使用加速能力“向上”定位

    本节书摘来自异步社区<iOS 6高级开发手册(第4版)>一书中的第1章,第1.5节秘诀:使用加速能力"向上"定位,作者 [美]Erica Sadun,更多章节内容可以访 ...

  7. 《iOS 6高级开发手册(第4版)》——2.5节秘诀:Quick Look预览控制器

    本节书摘来自异步社区<iOS 6高级开发手册(第4版)>一书中的第2章,第2.5节秘诀:Quick Look预览控制器,作者 [美]Erica Sadun,更多章节内容可以访问云栖社区&q ...

  8. 《iOS 6高级开发手册(第4版)》——1.8节使用加速度移动屏幕上的对象

    本节书摘来自异步社区<iOS 6高级开发手册(第4版)>一书中的第1章,第1.8节使用加速度移动屏幕上的对象,作者 [美]Erica Sadun,更多章节内容可以访问云栖社区"异 ...

  9. 阿里新版java开发手册(2019华山版、2020泰山版)

    pdf文件链接: https://pan.baidu.com/s/15Q_qCyqLTG0wBFyHVM3zog 提取码: in6y 目录 一. 编程规约 (一) 命名风格 (二) 常量定义 (三) ...

最新文章

  1. 比特币与企业级区块链的区别
  2. 华硕主板X99-E WS/USB 3.1固件更新
  3. Windows 8 快捷键收集整理
  4. 游戏组件——挑战:创建NextBlock游戏组件
  5. iphone 字符串分隔与组合
  6. 酷客多郝宪玮:不够小程序化的企业,将错失最近5年的流量红利
  7. 实现基于内核栈切换的进程切换-linux011
  8. python实现抢劵_双十一福利丨机械键盘、蓝牙音箱送送送!Python/UI/Unity多场微课解剖双十一套路!...
  9. python机器学习生物信息学
  10. sodp软件如何导入多个工作面信息_平方英尺和面积计算软件:Metes and Bounds for Mac...
  11. 超级加粗大标题Mogrt免费PR动态图形模板
  12. 2020-12-25
  13. 萨缪尔·莫尔斯:电报之父的传奇人生
  14. 【10月10日】指数估值排名
  15. “以图搜图”引擎及网站合集
  16. NYOJ-366:D的小L
  17. 前端必会的anime动画库
  18. 循环闹钟c语言,闹钟设置四天一个循环,自定义周期循环提醒便签
  19. linux查看sriov端口,sriov查看pf-vf对应关系
  20. DirectX12(D3D12)基础教程(四)——初识DirectXMath库、使用独立堆创建常量缓冲、理解管线状态对象、理解围栏同步

热门文章

  1. iOS进阶之架构设计MVVM的实现示例(5)
  2. swift_039(Swift中的KVC的使用方法)
  3. Eclipse 导入逆向工程
  4. 吴裕雄 python 神经网络——TensorFlow 花瓣分类与迁移学习(1)
  5. Unreachable code
  6. mongodb 复制集 维护小结
  7. Ubuntu终端字体颜色方案
  8. 互联网创业如何与传统行业人士合作?
  9. Flex 学习笔记 动态设置itemRenderer
  10. Intellij IDEA 使用Spring-boot-devTools 没有生效 解决方法