iOS系列 基础篇 05 视图鼻祖 - UIView

目录:

  1. UIView“家族”
  2. 应用界面的构建层次
  3. 视图分类
  4. 最后

  在Cocoa和Cocoa Touch框架中,“根”类时NSObject类。同样,在UIKit框架中,也存在一个神奇的类——UIView。

  从继承关系上看,UIView是所有视图的根,我们形象地称其为“始祖”。

  本篇,咱们就一起研究UIView的神奇所在。

1. UIView“家族”

  UIView“家族”大体分为“控件”和“视图”两类,二者均继承于UIView。

  UIView类的继承层次如图:

  UIControl类是控件类,其子类有UIButton、UITextField和UISilder等。之所以称它们为“控件类”,是因为它们都有能力响应一些高级事件。

  为了查看这些事件,我们可以在Interface Builder中拖拽一个UIButton控件到设计界面,然后选中这个Button,单击右上角的按钮,打开连接检查器,如图:

  其中Sent Events栏中的内容就是UIButton相对应的高级事件。UIControl类以外的视图没有这些高级事件,这可以借助HelloWorld工程中的Label控件验证一下。

  选中UILabel控件,打开连接检查器,如图,可以发现UILabel的连接检查器中没有Sent Events栏,即没有高级事件,不可以响应高级事件。

  事实上,视图也可以响应事件,但这些事件比较低级,需要开发人员自己处理。很多手势的开发都以这些低级事件为基础。

2. 应用界面的构建层次

  iOS应用界面是由若干个视图构建而成的,这些视图对象采用树形构建。

  如图所示是一个应用界面的构建层次图:

  该应用又一个UIWindow,其中包含一个UIView根视图。

  根视图下又有三个子视图:Button1、Button2和UIView(View2),其中子视图UIView(View2)中存在一个按钮Button3。

  一般情况下,应用中智包含一个UIWindow。从视图构建层次上讲,UIWindow包含了一个根视图UIView。

  根视图一般也只有一个,放于UIWindow中。根视图的类型决定了应用程序的类型。

  上图中各对象之间的关系如下:

  应用界面的构建层次是一种树形结构,UIWindow是“树根”,根视图是“树干”,其它对象为树冠。在层次结构中,上下两个视图是“父子关系”。

  除了UIWindow,每个视图的父视图有且只有一个,子视图可以有多个。

  它们之间的关系设计三个属性,如下:

  下面简要介绍这三个属性的含义:

  • superview:获得父视图对象。
  • subviews:获得子视图对象集合。
  • window:获得视图所在的UIWindow对象。

3. 视图分类

  为了便于开发,苹果将UIKit框架中的视图分成以下几个类别:

  • 控件:继承自UIControl类,能够响应用户的高级事件。
  • 窗口:它是UIWindow对象,一个iOS应用只有一个UIWindow对象,它是所有子视图的“根”容器。
  • 容器视图:它包括了UIScrollView、UIToolbar以及它们的子类。UIScrollView的子类有UITextView、UITabView和UICollectionView,在内容超出屏幕时,它们可以提供水平或垂直滚动条。UIToolbar是非常特殊的容器,它能够包含其他控件,一般置于屏幕底部,特殊情况下也可以置于屏幕顶部。
  • 显示视图:用于显示信息,包括UIImageView、UILabel、UIProgressView和UIActivityIndicatorView等。
  • 文本和Web视图:提供了能够显示多行文本的视图,包括UITextView和UIWebView,其中UITextView也属于容器视图,UIWebView是能够加载和显示HTML代码的视图。
  • 导航视图:为用户提供从一个屏幕到另外一个屏幕的导航(或跳转)视图,它包括UITabBar和UINavigationBar。
  • 警告框和操作表:用于给用户提供一种反馈或者与用户进行交互。UIAlertView视图是一个警告框,它会以动画形式弹出来;而UIActionSheet视图给用户提供可选的操作,它会从屏幕底部滑出。

注意:

  我们以后会遇到很多视图(如UILabel、文本视图和进度条等)并未继承UIControl类,但我们也习惯称为“控件”,这是开发中约定俗称的一种常用归类方式,与严格意义上的概念性分类有差别。

4. 最后

  没有结尾总觉得哪里怪怪的。。

iOS系列 基础篇 05 视图鼻祖 - UIView的更多相关文章

  1. iOS系列 基础篇 04 探究视图生命周期

    iOS系列 基础篇 04 探究视图生命周期 视图是应用的一个重要的组成部份,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻. 以视图的四种状态为基础,我们来系统了解一下视 ...

  2. iOS系列 基础篇 03 探究应用生命周期

    iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...

  3. iOS系列 基础篇 06 标签和按钮 (Label & Button)

    iOS系列 基础篇 06 标签和按钮 (Label & Button) 目录: 标签控件 按钮控件 小结 标签和按钮是两个常用的控件,下面咱们逐一学习. 1. 标签控件 使用Single Vi ...

  4. iOS系列 基础篇 08 文本与键盘

    iOS系列 基础篇 08 文本与键盘 目录: 1. 扯扯犊子 2. TextField 3. TextView 4. 键盘的打开和关闭 5. 打开/关闭键盘的通知 6. 键盘的种类 7. 最后再扯两句 ...

  5. iOS系列 基础篇 07 Action动作和输出口

    iOS系列 基础篇 07 Action动作和输出口 目录:  1. 前言及案例说明 2. 什么是动作? 3. 什么是输出口? 4. 实战 5. 结尾 1. 前言及案例说明 上篇内容我们学习了标签和按钮 ...

  6. iOS系列 基础篇 09 开关、滑块和分段控件

    iOS系列 基础篇 09 开关.滑块和分段控件 目录: 案例说明 开关控件Switch 滑块控件Slider 分段控件Segmented Control 1. 案例说明 开关控件(Switch).滑块 ...

  7. Java多线程系列--“基础篇”05之 线程等待与唤醒

    概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...

  8. iOS系列 基础篇 01 构建HelloWorld,剖析并真机测试

    iOS基础 01 构建HelloWorld,剖析并真机测试 前言: 从控制台输出HelloWorld是我们学习各种语言的第一步,也是我们人生中非常重要的一步. 多年之后,我希望我们仍能怀有学习上进的心 ...

  9. iOS系列 基础篇 02 StoryBoard 故事板文件

    iOS基础 02 StoryBoard 故事板文件 目录: 1. 故事板的导航特点 2. 故事板中的Scene和Segue 3. 本文最后 在上篇HelloWorld工程中有一个Main.storyb ...

随机推荐

  1. [异常解决] How to build a gcc toolchain for nRF51 on linux (very detailed!!!)

    1.Install gcc-arm-none-eabi https://devzone.nordicsemi.com/tutorials/7/This link shows that developm ...

  2. Eclipse 使用技巧

    1.Eclipse 格式化代码时不换行与自动换行 Eclipse 推荐的编码风格默认是80列换行.每次用Eclipse自带的Ctrl+shift+f格式化代码时,如果原来的一行代码大于80列,Ecli ...

  3. Enterprise Solution 企业资源计划管理软件 C/S架构,支持64位系统,企业全面应用集成,制造业信息化

    Enterprise Solution是一套完整的企业资源计划系统,功能符合众多制造业客户要求.系统以.NET Framework技术作为开发架构,完善的功能可有效地帮助企业进行运营策划,减低成本,如 ...

  4. 前端学PHP之mysql扩展函数

    × 目录 [1]连接数据库 [2]使用数据库 [3]执行SQL查询[4]操作结果集[5]关闭连接 前面的话 mysql由于其体积小.速度快.总体拥有成本低,尤其是具有开放源码这一特点,许多中小型网站为 ...

  5. 大三作品:不需要售货员的超市? Easy-Shopping超市导购系统

    本来么,逛超市是一件很爽的事情,拉上父母孩子,推个大推车,一边聊一边买,然后开开心心的回家去. 可到了旺季,逛超市可就麻烦了,买东西人挤人,到结算的地方人山人海,一刷卡,我去,怎么这个卫生纸这么贵!这 ...

  6. Oracle数据库验证IMP导入元数据是否会覆盖历史表数据

    场景:imp导入数据时,最终触发器报错退出,并未导入存储过程.触发器.函数. 现在exp单独导出元数据,然后imp导入元数据,验证是否会影响已导入的表数据. 测试环境:CentOS 6.7 + Ora ...

  7. Error:const char* 类型的实参和LPCWSTR类型的形参不兼容的解决方法。

    在C++的Windows 应用程序中经常碰到这种情况. 解决方法: 加入如下转换函数: LPCWSTR stringToLPCWSTR(std::string orig) { size_t origs ...

  8. css随笔记

    使用伪类写边框部分三角 右上角三角形 border-top:6px solid #c1ddf7 border-left:6px solid transparent 右下角三角形 border-bott ...

  9. CSS 基础篇、绝对有你想要

    本章内容: 简介 CSS 定义 四种引入方式 样式应用的顺序 选择器(Selector) * 通用元素选择器 标签选择器 class 类选择器 # ID选择器 , 多元素选择器 后代元素选择器 > ...

  10. 高分辨率下IE浏览器缩放导致出现右侧滚动条问题的解决

    0 问题描述 由于需要演示触控操作,采购了SurfacePro,SurfacePro的推荐分辨率为2736×1824,且默认缩放比例为200%,IE浏览器的默认缩放比例也是200%,这样就导致右侧出现 ...