1、UIView

在Objective-C中,NSObject是所有类的“根”类。同样,在UIKit框架中,也存在一个如此神奇的类UIView。从继承关系上看,UIView是所有视图的根。

1.1、UIView家族

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

UIControl类是控件类,之所以这样称呼,是因为它们都有能力响应一些高级事件。UIControl类以外的视图没有这些高级事件。

1.2、应用界面的构建层次

下图(左)是一个应用界面的构建层次图,该应用有一个UIWindow,其中包含一个UIView根视图。根视图下又有3个子视图-button1、label2和UIView(View2),其中子视图UIView(View2)中存在一个按钮Button3。

一般情况下,应用中只包含一个UIWindow。从视图构建层次上讲,UIWindow包含了一个根视图UIView。根视图一般也只有一个,放于UIWindow中。根视图的类型决定了应用程序的类型。

应用界面的构建层次是一种树形结构,UIWindow是“树根”,根视图是“树干”,其他对象是树冠。在层次结构中,上下两个视图是“父子关系”。除了UIWindow,每个视图的父视图有且只有一个,子视图可以有多个。

Superview,获得父视图对象。Subviews,获得子视图对象集合。Window,获得视图所在的UIWindow对象。

1.3、视图分类

为了便于开发,苹果将UIKit框架中的视图氛围一下几个类别。

控件。继承自UIControl类,能够响应用户高级事件。

窗口。它是UIWindow对象。一个iOS应用只有一个UIWindow对象,它是所有子视图的“根”容器。

容器视图。它包括了UIScrollView、UIToolbar以及它们的子类。UIToolbar是非常特殊的容器,它能够包含其他控件,一般置于屏幕底部,特殊情况下也可以置于屏幕顶部。

显示视图。用于显示信息,包括UIImageView、UILabel、UIProgressView和UIActivityIndicatorView等。

文本和Web视图。提供了能够显示多行文本的视图,包括UITextView和UIWebView,其中UITextView也属于容器视图,UIWebView能够加载和显示HTML代码的视图。

导航视图。为用户提供从一个屏幕到另外一个屏幕的导航(或跳转)视图,它包括UITabBar和UINavigationBar。

警告框和操作表。用于给用户提供一种反馈或者与用户进行交互。UIAlertView视图是一个警告框,它会以动画形式弹出来;而UIActionSheet视图给用户提供可选的操作,它会从屏幕底部滑出。

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

2、TextField和TextView

2.1、在UIKit框架中,TextField控件由UITextField类创建。此外,它还有对应的UITextFieldDelegate委托协议。委托可以帮忙响应事件处理。TextField继承了UIControl,隶属于真正的“控件”,而TextView继承了UIScrollView。

2.2、TextView是一个可以展示和编辑多行文本的控件,由UITextView类创建。TextView控件有对应的UITextViewDelegate委托协议,我们可以借助委托来响应事件。

2.3、一旦TextField和TextView等控件处于编辑状态,系统就会智能的弹出键盘,但关闭键盘就没那么顺利了,我们需要用代码去实现。

当TextField或TextView处于编辑状态时,这些控件变成了“第一响应者”。要关闭键盘就要放弃“第一响应者”身份。在iOS中,事件沿着响应者链从一个响应者传到下一个响应者,如果其中一个响应者没有对事件作出响应,那么该事件会重新向下传递。

3.WebView

3.1、WebView控件可以加载本地HTML代码或者网络资源。

3.1.1本地资源的加载采用同步方式,数据可以来源于本地文件或者是硬编码的HTML字符串。具体方法如下:

loadHTMLString:baseURL。设定主页文件的基本路径,通过一个HTML字符串加载主页数据。

loadData:MIMEType:textEncodeingName:baseURL。指定MIME类型、编码集和NSData对象加载一个主页数据,并设定主页文件的基本路径。

使用这两个方法时,需要注意字符集问题,而采用什么样的字符集取决于HTML文件。

3.1.2加载网络资源时,我们采用的是异步加载方式,使用的方法是loadRequest:(NSURLRequest *)request,该方法要求提供一个NSURLRequest对象,该对象在构建的时候必须严格遵守某种协议格式,例如:http://www.baidu.com,HTTP协议,file://localhost/Users/abc.../index.html,文件传输协议。其中heep://和file://是协议名,不能省略。

由于我们采用异步请求加载WebView,所以还要实现相应的UIWebViewDelegate委托协议,通过实现协议来响应WebView在加载不同阶段的事件。

下面我们通过案例来了解一下WebView这3个方法的用法。该案例有3个按钮,分别为loadHTMLString、loadData和loadRequest,点击这三个按钮分别触发WebView的3个加载方法。

在ViewController.h文件中定义输出口和动作,代码如下:

 #import <UIKit/UIKit.h>

 @interface ViewController : UIViewController <UIWebViewDelegate> 

 @property (weak, nonatomic) IBOutlet UIWebView *webView;

 - (IBAction)testLoadHTMLString:(id)sender;
- (IBAction)testLoadData:(id)sender;
- (IBAction)testLoadRequest:(id)sender; @end

上述代码中,我们定义了3个动作方法和一个UIWebView输出口属性。在ViewController.m文件中,testLoadHTMLString:和testLoadData:方法的代码如下:

 - (IBAction)testLoadHTMLString:(id)sender {

         NSString *htmlPath = [[NSBundle mainBundle] pathForResource:
@"index" ofType:@"html"];
NSURL *bundleUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
NSError *error = nil; NSString *html = [[NSString alloc] initWithContentsOfFile:
htmlPath encoding: NSUTF8StringEncoding error:&error]; if (error == nil) {//数据加载

读书笔记-UIView与控件的更多相关文章

  1. iOS企业级开发初级课程-UIView与控件(20集)

    UIView与控件向大家介绍了视图和控件之间的关系以及应用画面的建构层次.然后是对标签.按钮.文本框.文本视图.开关.滑块.分段控件.网页控件.屏幕滚动控件.等待控件.进度条.警告.动作选单.工具栏. ...

  2. WPF-学习笔记 动态修改控件Margin的值

    原文:WPF-学习笔记 动态修改控件Margin的值 举例说明:动态添加一个TextBox到Grid中,并设置它的Margin: TextBox text = new TextBox(); t_gri ...

  3. Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件

    最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下 1.UI控件与布局 常用的主要 ...

  4. 技术笔记:Indy控件发送邮件

    工作中有个需求需要发送邮件,因为使用的delphi6,所以自然就选择了indy组件,想想这事挺简单的.实现的过程倒是简单,看着Indy的demo很快就完了,毕竟也不是很复杂的功能. 功能要求: 1.压 ...

  5. 学习笔记:UpdatePanel控件

    Asp.net UpdatePanel 允许用户构建一个丰富的,以客户端为中心的应用程序,引用UpdatePanel控件,能够实现页面的部分刷新,一个包含scriptManage和 UpdatePan ...

  6. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.9.Progressbar控件

    Progressbar控件用来显示任意进程的完成百分比. 默认安装启用 配置选项 控件暴露的事件API progressbar暴露的独一无二的方法 一些现实生活的例子 当前版本中,我们或系统必须明确进 ...

  7. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.8.Datepicker控件

    默认datepicker的安装启用 探索它的配置选项 安装启用一个触发按钮 配置一个供选择的动画 dateFormat选项 简单的国际化 多月datepicker 日期范围选择 datepicker的 ...

  8. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.7.Slider控件

    默认slider的安装启用 为slider自定义风格 修改配置选项 创建一个垂直的slider 设置最大最小值,和默认值 启用多个 手柄 和 范围 slider内置的回调事件 slider的方法 这个 ...

  9. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.6.Dialog控件

    习惯上,我们播放一条简短的信息,或向浏览者询问一个问题,都会用到dialog. 创建一个基本的dialog 使用dialog 选项 形式 启用内置动画 给dialog添加按钮 使用dialog回调函数 ...

随机推荐

  1. discuz+ecmall+phpcms整合

    所需软件 discuzx1.5 (包含ucenter1.5) ecmall2.3 phpcms v9.5 1.先安装discuz1.5 2.然后安装ecmall2.3 3.最后安装phpcms v9. ...

  2. NPOI 教程 - 3.2 打印相关设置

    转:http://www.cnblogs.com/wolfplan/archive/2013/01/13/2858991.html NPOI 教程 - 3.2 打印相关设置   打印设置主要包括方向设 ...

  3. JS Math算数

    Math.ceil()ceil() 方法可对一个数进行上舍入. ceil英译 天花板 参数必须是一个数值.返回值大于等于 x,并且与它最接近的整数. Math.floor()floor() 方法可对一 ...

  4. C# 读取文件的修改时间、访问时间、创建时间

    C# 获取文件的各个时间如下: 表2<ccid_nobr> 属性 功能和用途 Attributes 返回和文件相关的属性值,运用了FileAttributes枚举类型值 CreationT ...

  5. iOS 多线程讲解2

    1.GCD其他方法 1.GCD应用 单例模式 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@&qu ...

  6. 【原创】mac 上如何安装及切换输入法

    1. 安装输入法 刚购入mac mini一台,默认只有英文输入法,而自己用习惯了sogou输入法,于是就在网上下载安装了一个sogou拼音输入 for mac. 下载完毕后,在屏幕下方的dock区域右 ...

  7. linux_jvm_jmap_dump内存分析

    jmap命令   jmap命令 jmap命令可以获得运行中的jvm的堆的快照,从而可以离线分析堆,以检查内存泄漏,检查一些严重影响性能的大对象的创建,检查系统中什么对象最多,各种对象所占内存的大小等等 ...

  8. 【Linux】Shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  9. React Native视频播放(iOS)

    网站链接:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/learn-react-native-video/ React Nativ ...

  10. POJ 1308 Is It A Tree? (并查集)

    Is It A Tree? Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24237   Accepted: 8311 De ...