1.网页控件 WebView
1.1 UIKit中的UIWebView类能够味用户提供显示多行文本的视图,可以使用Web等技术进行显示HTML、解析CSS和执行JavaScript等操作。UIWebView的内核是开源的WebKit浏览器引擎。
WebView控件可以加载本地HTML代码或者网络资源。
本地资源的加载采用同步方式,数据可以来源于本地文件或者是硬编码的HTML字符串。
loadHTMLString:baseURL:设定主页文件的基本路径,通过一个HTML字符串加载主页数据。
loadData:MIMEType:textEncodingName:basseURL:指定MIME类型,编码集和NSData对象加载一个主页数据,并设定主页文件基本路径。
使用者两个方法时,需要注意字符集问题,而采用什么样的字符集取决于HTML文件。
加载网络资源时,采用一步加载方式,使用的方法是loadRequest:(NSURLRequest *)request,该方法要求提供一个NSURLRequest对象,该对象在构建的适合必须严格遵守某种协议,例如:
http://www.sina.com.cn,HTTP协议;
file://localhost/Users/tonyguan/../index.html,文件传输协议;
其中http://和file://是协议名,不能省略。
由于采用异步请求加载WebView,所以还要实现相应地UIWebViewDelegate委托协议,通过实现UIWebViewDelegate协议响应WebView在加载的不同阶段的事件。
这两个方法用于加载本地资源文件index.html,并将其显示在WebView上,在testLoadHTMLString: 方法中,通过NSString的initWithContentOfFile:encoding:error:方法将index.html文件的内容读取到NSString对象中。在self.webView loadHTMLString:html baseURL:bundleUrl语句中,baseURL参数用于设定主页文件的基本路径,即index.html所在的资源目录,这个可以用 NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]语句来获取。
document.body.innerHTML获得页面中的HTML代码的JavaScript语句
UIWebViewDelegate委托协议定义的方法:
- webView:shouldStartLoadWithRequest:navigationType:。该方法在WebView开始加载新的界面之前调用,可以用来捕获WebView中的JaveScript事件。
- webViewDidStartLoad:。该方法在WebView开始加载新的界面之后调用。
- webViewDidFinishLoad:。改方法在WebView完成加载新的界面之后调用。
- webView:didFailLoadWithError:。该方法在WebView加载失败时调用。
1.2 使用WebView构建Hybird应用
Hybird应用同时融合了本地技术和Web技术,它能够同时发挥本地技术和Web技术各自的优势。纯Web技术的应用虽然禁止在App Store中发布,但Hybrid确可以获得发布许可。有一个Hybird框架--PhoneGap(http://phonegap.com/)用于移动平台的开发,PhoneGap现在被Adobe收购了,提供13个调用本地的API,采用的是JavaScript、CSS3和HTML5等Web技术。PhoneGap的核心原理是:本地代码调用JavaScript;JavaScript调用本地代码。WebView是实现Hybird应用的核心,也是实现本地技术和Web技术融合的核心。
在Xcode工程中,文件夹和组的颜色是不同的,文件夹是灰色的,组是黄色的;在使用过程中,文件夹和组也是有本质区别的,如果将文件放入到文件夹中,则反问文件的路径是“文件夹/index.html",而如果将文件放入到组中,访问的路径是”index.html"
2 屏幕滚动控件 ScrollView
scrollView在UIKit中是UIScrollView类,是容器类型的视图,它有两个子类:UITextView和UITableView
2.1 scrollView属性的设置:contentSize,contentInset和contentOffset。
contentSize:ScrollView内容视图的大小,CGSize结构体类型,包含width和height两成员
contentInset:用于在ScrollView中的内容视图周围添加边框,这往往为了留出空白以放置工具栏、标签栏或导航栏。contentInset属性有4个分量,分别是top,buttom,left,right,分别代表顶边距离,底边距离,左边距离和右边距离
contentOffset:内容视图坐标原点与scrollView坐标原点的偏移量,返回CGPoint结构体类型,包含x和y两个成员
3 键盘与其他控件的协同
显示键盘时会遮挡一些控件,需要在键盘打开前后,摆放好ScrollView和控件的位置
4 等待相关的控件和进度条
在请求完成前,经常会用到活动指示器ActivityIndicatorView和进度条ProgressView,其中活动指示器可以消除用户的心理等待时间,而进度条可以指示请求的进度
4.1 活动指示器ActivityIndicateView
使用一个按钮,通过点击实现活动指示器的旋转和停止
4.2 进度条ProgressView
引入定时器(NSTimer),方便任务进度的显示
NSTimer的类方法+(NSTimer *)scheduledTimerWithInterval:(NSTimeInterval)seconds target:(id)target
selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats,
target用于指定发送消息给哪个对象,aSelector指定要调用的方法名,相当于一个函数指针,userInfo可以给消息发送参数,repeats表示重复与否