(五十九)iOS网络基础之UIWebView简易浏览器实现
【UIWebView网络浏览器】
通过webView的loadRequest方法可以发送请求显示相应的网站,例如:
NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"]; // 创建请求数据 NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 向服务器发送请求 [self.webView loadRequest:request];
通过使用searchBar,可以实现网址的输入,searchBar有一个delegate属性可以将控制器设为其代理,下面实现了一个简易的浏览器。
首先是调用代理方法来监听搜索按钮:
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{ [self.view endEditing:YES]; [self searchWithNSStringUrl:searchBar.text]; }
然后实现搜索栏信息的解析,注意没有http://要补全的逻辑方法:
使用NSStringFromRange方法可以实现字符串的子串位置查找,通过判断range的location成员是否等于NSNotFound可以判断是否匹配失败。
- (void)searchWithNSStringUrl:(NSString *)surl{ NSRange range = [surl rangeOfString:@"http://"]; NSLog(@"range = %@",NSStringFromRange(range)); if (range.location == NSNotFound) { NSString *head = @"http://"; surl = [head stringByAppendingString:surl]; } NSURL *url = [NSURL URLWithString:surl]; // 创建请求数据 NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 向服务器发送请求 [self.webView loadRequest:request]; }
直接判断字符串是否以某字符串开头可以直接使用NSString的hasPrefix:方法。
前进和后退的实现:直接将按钮的前进和后退事件和按钮绑定。
一些细节:
1.在不能后退和前进时应该将按钮禁用,不同页面是通过链表连接的。
判断的方式:通过判断webView的链表,也可以通过canGoBack和canGoForward两个BOOL变量来判断。
2.地址栏应该随着网页内容而改变,通过获取WebView的URL,并通过absoluteString方法转为字符串:
- (void)webViewDidStartLoad:(UIWebView *)webView{ NSURL *url = webView.request.URL; NSString *surl = [url absoluteString]; self.searchBar.text = surl; }
使用HTML:
PhoneGap是基于HTML 5开发的一套框架,只要会做网页就可以开发应用,但是不能使用原生的硬件。
好处是可以一次性开发多个平台的应用。
【利用UIWebView加载文件】
可以通过Bundle或者沙盒加载。
传入文件的URL即可加载doc、txt、图片、pdf等各种内容。
例如读入一本pdf:
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"English.pdf" withExtension:nil]; NSURLRequest *request = [NSURLRequest requestWithURL:fileURL]; [self.webView loadRequest:request];还可以通过dataDetectorTypes来设定需要高亮链接的文本类型:例如电话、地址、邮箱等
_webView.dataDetectorTypes = UIDataDetectorTypeAll;
【利用UIWebView加载HTML】
[self.webView loadHTMLString:@"<h1>hello</h1>" baseURL:nil];利用这个功能可以实现删除广告等功能。
【UIWebView能够加载文件的原因】
MIME type是一个互联网标准,服务器将MIME标识符放入传送的数据中告诉浏览器使用哪种插件读取相关文件,MIME类型可以包含视频、图像、文本等数据。
网络通过二进制数据流来传输数据,客户端通过MIME type能够知道如何处理接收的数据。