读书笔记-UIView与控件
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与控件的更多相关文章
- iOS企业级开发初级课程-UIView与控件(20集)
UIView与控件向大家介绍了视图和控件之间的关系以及应用画面的建构层次.然后是对标签.按钮.文本框.文本视图.开关.滑块.分段控件.网页控件.屏幕滚动控件.等待控件.进度条.警告.动作选单.工具栏. ...
- WPF-学习笔记 动态修改控件Margin的值
原文:WPF-学习笔记 动态修改控件Margin的值 举例说明:动态添加一个TextBox到Grid中,并设置它的Margin: TextBox text = new TextBox(); t_gri ...
- Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件
最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下 1.UI控件与布局 常用的主要 ...
- 技术笔记:Indy控件发送邮件
工作中有个需求需要发送邮件,因为使用的delphi6,所以自然就选择了indy组件,想想这事挺简单的.实现的过程倒是简单,看着Indy的demo很快就完了,毕竟也不是很复杂的功能. 功能要求: 1.压 ...
- 学习笔记:UpdatePanel控件
Asp.net UpdatePanel 允许用户构建一个丰富的,以客户端为中心的应用程序,引用UpdatePanel控件,能够实现页面的部分刷新,一个包含scriptManage和 UpdatePan ...
- 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.9.Progressbar控件
Progressbar控件用来显示任意进程的完成百分比. 默认安装启用 配置选项 控件暴露的事件API progressbar暴露的独一无二的方法 一些现实生活的例子 当前版本中,我们或系统必须明确进 ...
- 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.8.Datepicker控件
默认datepicker的安装启用 探索它的配置选项 安装启用一个触发按钮 配置一个供选择的动画 dateFormat选项 简单的国际化 多月datepicker 日期范围选择 datepicker的 ...
- 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.7.Slider控件
默认slider的安装启用 为slider自定义风格 修改配置选项 创建一个垂直的slider 设置最大最小值,和默认值 启用多个 手柄 和 范围 slider内置的回调事件 slider的方法 这个 ...
- 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.6.Dialog控件
习惯上,我们播放一条简短的信息,或向浏览者询问一个问题,都会用到dialog. 创建一个基本的dialog 使用dialog 选项 形式 启用内置动画 给dialog添加按钮 使用dialog回调函数 ...
随机推荐
- 都是类型惹的祸——小心unsigned
正如我们所知道的,编程语句都有很多的基本数据类型,如char,inf,float等等,而在C和C++中还有一个特殊的类型就是无符号数,它由unsigned修饰,如unsigned int等.大家有没想 ...
- HANDLER命令与实现
MySQL“自古以来”都有一个神秘的HANDLER命令,而此命令非SQL标准语法,可以降低优化器对于SQL语句的解析与优化开销,从而提升查询性能.看到这里,可能有小伙伴不淡定了,这么好的东西为啥没广泛 ...
- 在Linux最大打开文件数限制下 MySQL 对参数的调整
http://www.actionsky.com/docs/archives/78 2016年4月7日 周文雅 目录 1 起因 2 说明 3 MySQL调整参数的方式 3.1 计算 request ...
- Java再学习——深究static关键字
一.static关键字的用途 可以在没有创建对象的情况下来进行(方法/变量)调用.也就是,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问. ...
- Qt 静态编译的问题.
编译参数 configure -confirm-license -opensource -developer-build -static -prefix D:\libraries\Qt5.3.1s - ...
- C语言中和指针相关的四道题目
例子1. void fun (int *x , int *y) { printf("%d, %d", *x, *y) ; *x = 3; *y = 4;} main(){ int ...
- Frogs' Neighborhood
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 7920 Accepted: 33 ...
- iOS7.1 编译报错 解决方案 体会
iOS升级到 iOS 7.1 了 ,开发人员必须与时俱进.果断下载更新了xcode5.1版本 ,试运行了一下已上线的应用,哇 报错了!好头疼 贴下报错地方: 都是关于第三方类库报的错 比如parse. ...
- [HTML] Google IE-x.js 解决IEx与W3C标准的冲突
如果分别用IE5.IE6.IE7浏览同一个网页,将可能出现不一样的效果.这是它们之间对CSS的解析选择器不一样或错误和个别bug所导致.为了解决这些错误和bug.我们不得不找到一个能平衡于它们之间的解 ...
- #技塑人生# windows2008无法远程— 注册表缺失键值导致高级防火墙服务异常
windows2008无法远程— 注册表缺失键值导致高级防火墙服务异常 阿里云技术支持中心:章阿贵 一.远程无法访问(windows server 2008) 症状:无法远程但是系统内网络正常,防火墙 ...