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. hdu 5591 ZYB's Game 博弈论

    ZYB's Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=55 ...

  2. Codeforces Round #308 (Div. 2) A. Vanya and Table 暴力

    A. Vanya and Table Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/552/pr ...

  3. 识货的拿走:Android游戏框架解读之总体结构

    Android游戏开发的框架图无偿奉上.

  4. [Angular2 Form] Style Validation in Angular 2 Forms

    Inputs using Angular 2’s ngModel automatically apply style classes of .ng-validand .ng-invalid each ...

  5. unity3d快捷键大全

    Unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面 整合的专业游戏引擎.Unit ...

  6. 大一C语言结课设计之《学生信息管理系统》

    第一次写这么长的程序,代码仅供參考,有问题请留言. /* ** 学生信息管理系统 ** IDE:Dev-Cpp 4.9.9.2 ** 2014-6-15 */ #include <stdio.h ...

  7. 项目源码--Android答题类游戏源码

    下载源码 技术要点: 1. 精致的答题UI 2. Android的Http通信技术 3. Android数据库QLITE与其他数据存储技术 4. Android在线音乐背景技术 5. Android答 ...

  8. dpkg的用法

    转载:http://blog.csdn.net/sunjiajiang/article/details/7252593 dpkg是一个Debian的一个命令行工具,它可以用来安装.删除.构建和管理De ...

  9. 美国H1B基本情况及相关数据

    H-1B是外国人在美国工作的签证,从美国学校毕业之后会有12个月的OPT实习期,在OPT结束之前必须申请到H1B签证才能在实习期结束后继续工作. H1B需要由雇佣你的公司帮你申请,也就是说必须先找到工 ...

  10. JavaSE——面向对象与面向过程、类与对象、(属性、方法、构造器)等

    一:面向对象与面向过程 二者都是一种思想,面向对象是相对于面向过程而言的. 面向过程: 1.面向过程思想强调的是过程(动作). 2.在面向过程的开发中,其实就是面向着具体的每一个步骤和过程,把每一个步 ...