• UIWebView简介
  • 知识点总结
  • 代码实现

一、UIWebView简介

1.是iOS内置的浏览器控件,可以浏览网页、打开文档等
2.能够加载html/htm、pdf、docx、txt等格式的文件
3.系统自带的Safari浏览器就是通过UIWebView实现的
二、知识总结
1⃣️UIWebView是内置浏览器控件,能够加载html、pdf、txt等多种格式文件
2⃣️常用加载方法:
loadRequest:
loadHTMLString:baseURL:
loadData:MIMEType:textEncodingName:baseURL:
3⃣️常用导航方法:
goBack – 回退  
goForward – 前进 
reload - 重载  
stopLoading - 取消载入内容
4⃣️常用属性:
scalespageToFit – 自动对页面进行缩放以适应屏幕
dataDetectorTypes - 设定电话号码、网址、电子邮件和日期等文字变为链接文字
浏览器通过MIME标志符可以知道使用哪种插件读取相关文件
5⃣️iOS可以直接调用js代码与页面通讯
三、代码实例
1⃣️图解
  1. #import "ViewController.h"
  2.  
  3. @interface ViewController ()
  4.  
  5. // 访问指定URL字符串的内容,仅由文本框事件调用
  6. - (void)gotoURLString:(NSString *)urlString;
  7.  
  8. // 访问指定的URL内容
  9. - (void)gotoURL:(NSURL *)url;
  10.  
  11. // 获得本地文件的MIMEType
  12. - (NSString *)MIMEType:(NSString *)fileName;
  13.  
  14. @end
  15.  
  16. @implementation ViewController
  17.  
  18. #pragma mark - UIWebView加载内容的测试方法
  19. // 加载HTML字符串
  20. - (void)testLoadHTMLString
  21. {
  22. // 测试加载HTML字符串
  23. NSString *html = @"<html><head><title>Hello</title></head><body><h1>Hello Itcast</h1></body></html>";
  24.  
  25. [_webView loadHTMLString:html baseURL:nil];
  26. }
  27.  
  28. // 加载部分HTML字符串测试
  29. - (void)testLoadPartHTMLString
  30. {
  31. // 测试加载部分HTML字符串,不需要显示整个网页内容时,通常使用此方法
  32. NSString *partHtml = @"<h1>Hello Itcast</h1>";
  33. [_webView loadHTMLString:partHtml baseURL:nil];
  34. }
  35.  
  36. // 测试加载本地HTML文件
  37. - (void)testLoadHTMLFile
  38. {
  39. // 测试加载本地HTML文件,需要指定MIMETYPE
  40. NSString *dataPath = [[NSBundle mainBundle]pathForResource:@"demo" ofType:@"html"];
  41. NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]resourcePath] isDirectory:YES];
  42.  
  43. // 只有加载的html文件才需要指定baseURL路径,告诉浏览器去哪里找图片、样式表等文件
  44. [_webView loadData:[NSData dataWithContentsOfFile:dataPath] MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:baseURL];
  45. }
  46.  
  47. // 加载本地PDF文件
  48. - (void)testLoadPDFFile
  49. {
  50. // 测试加载本地PDF,需要指定MIMETYPE
  51. NSString *dataPath = [[NSBundle mainBundle]pathForResource:@"001.网络基础" ofType:@"pdf"];
  52.  
  53. [_webView loadData:[NSData dataWithContentsOfFile:dataPath] MIMEType:@"application/pdf" textEncodingName:@"UTF-8" baseURL:nil];
  54. }
  55.  
  56. // 加载本地文本文件
  57. - (void)testLoadTextFile
  58. {
  59. // 测试加载本地文本文件,需要指定MIMETYPE
  60. NSString *dataPath = [[NSBundle mainBundle]pathForResource:@"关于" ofType:@"txt"];
  61.  
  62. [_webView loadData:[NSData dataWithContentsOfFile:dataPath] MIMEType:@"text/plain" textEncodingName:@"UTF-8" baseURL:nil];
  63. }
  64.  
  65. - (void)viewDidLoad
  66. {
  67. [super viewDidLoad];
  68. // Do any additional setup after loading the view, typically from a nib.
  69. [self MIMEType:@"001.网络基础.pdf"];
  70.  
  71. [self testLoadHTMLFile];
  72. }
  73.  
  74. - (void)didReceiveMemoryWarning
  75. {
  76. [super didReceiveMemoryWarning];
  77. // Dispose of any resources that can be recreated.
  78. }
  79.  
  80. #pragma mark - UITextField代理方法
  81. // 文本框回车事件
  82. - (BOOL)textFieldShouldReturn:(UITextField *)textField
  83. {
  84. if (textField == _urlText && textField.text.length > ) {
  85. [textField resignFirstResponder];
  86.  
  87. [self gotoURLString:textField.text];
  88. }
  89.  
  90. return YES;
  91. }
  92.  
  93. #pragma mark - IBActions
  94. // 回退操作
  95. - (IBAction)goBack:(id)sender
  96. {
  97. [_webView goBack];
  98. }
  99.  
  100. // 前进操作
  101. - (IBAction)goForward:(id)sender
  102. {
  103. [_webView goForward];
  104. }
  105.  
  106. // 刷新
  107. - (IBAction)reloadURL:(id)sender
  108. {
  109. [_webView reload];
  110. }
  111.  
  112. // 提交表单
  113. - (IBAction)submit:(id)sender
  114. {
  115. // 获取当前页面的url
  116. NSString *url = [_webView stringByEvaluatingJavaScriptFromString:@"document.location.href"];
  117. NSLog(@"url %@", url);
  118.  
  119. // 获取当前页面的标题
  120. NSString *title = [_webView stringByEvaluatingJavaScriptFromString:@"document.title"];
  121. NSLog(@"title %@", title);
  122.  
  123. // 提交表单
  124. [_webView stringByEvaluatingJavaScriptFromString:@"document.forms[0].submit(); "];
  125. }
  126.  
  127. #pragma mark - 访问指定URL内容
  128. // 访问指定URL字符串的内容,仅由文本框事件调用,文本框回车时候调用的
  129. - (void)gotoURLString:(NSString *)urlString
  130. {
  131. NSURL *url = nil;
  132.  
  133. // 判断是否是httpURL
  134. if ([urlString hasPrefix:@"http://"]) {
  135. // URL中有中文的,是需要加百分号的!
  136. url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
  137. } else if ([urlString hasPrefix:@"file://"]) {
  138. // 判断给定参数是否已经是完整的url路径,避免出现前进后退后,URL变成完整URL无法访问的情况
  139. if ([urlString hasPrefix:@"file://localhost/"]) {
  140. // 注意此处不能使用fileURLWithPath方法
  141. url = [NSURL URLWithString:urlString];
  142. } else {
  143. // 如果没有localhost前缀的,说明是新输入的本地文件,需要转换url。
  144. // 检测字串范围
  145. NSRange range = [urlString rangeOfString:@"file://"];
  146. // 截取剩余部分作为文件名
  147. NSString *fileName = [urlString substringFromIndex:range.length];
  148. // 生成文件路径
  149. NSString *path = [[NSBundle mainBundle]pathForResource:fileName ofType:nil];
  150.  
  151. // 判断文件是否存在
  152. if ([[NSFileManager defaultManager]fileExistsAtPath:path]) {
  153. url = [NSURL fileURLWithPath:path];
  154. } else {
  155. url = nil;
  156. }
  157. }
  158. }
  159.  
  160. // 判断输入是否正确
  161. if (url == nil) {
  162. UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示"
  163. message:@"输入地址不正确,请重新输入!"
  164. delegate:nil
  165. cancelButtonTitle:@"确定"
  166. otherButtonTitles:nil, nil];
  167. [alert show];
  168. // 设置文本框输入焦点
  169. [_urlText becomeFirstResponder];
  170. } else {
  171. // 访问指定的URL内容
  172. [self gotoURL:url];
  173. }
  174. }
  175.  
  176. // 访问指定的URL内容
  177. - (void)gotoURL:(NSURL *)url
  178. {
  179. // 使用URL字符串替代URL文本框
  180. [_urlText setText:[url absoluteString]];
  181.  
  182. // 定义请求
  183. NSURLRequest *request = [NSURLRequest requestWithURL:url];
  184. // 设置数据检测类型
  185. [_webView setDataDetectorTypes:UIDataDetectorTypeAll];
  186.  
  187. // 加载请求
  188. [_webView loadRequest:request];
  189. }
  190.  
  191. // 获得本地文件的MIMEType
  192. - (NSString *)MIMEType:(NSString *)fileName
  193. {
  194. // 定义路径
  195. NSString *path = [[NSBundle mainBundle]pathForResource:fileName ofType:nil];
  196. // 定义URL
  197. NSURL *url = [NSURL fileURLWithPath:path];
  198. // 定义请求
  199. NSURLRequest *request = [NSURLRequest requestWithURL: url];
  200. // 定义响应
  201. NSURLResponse *response = nil;
  202.  
  203. // 发送同步请求
  204. [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
  205.  
  206. NSLog(@"MIMEType is %@", [response MIMEType]);
  207.  
  208. return [response MIMEType];
  209. }
  210.  
  211. #pragma mark - UIWebViewDelegate 代理方法
  212. // 网页开始加载的时候调用
  213. - (void)webViewDidStartLoad:(UIWebView *)webView
  214. {
  215. NSLog(@"开始加载");
  216. }
  217.  
  218. // 网页加载完成的时候调用
  219. - (void)webViewDidFinishLoad:(UIWebView *)webView
  220. {
  221. NSLog(@"加载完成");
  222. }
  223.  
  224. // 网页加载出错的时候调用
  225. - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
  226. {
  227. NSLog(@"加载出错%@", [error localizedDescription]);
  228. }
  229.  
  230. // 网页中的每一个请求都会被触发这个方法,返回NO代表不执行这个请求(常用于JS与iOS之间通讯)
  231. - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
  232. {
  233. NSLog(@"将要加载请求");
  234.  
  235. return YES;
  236. }
  237.  
  238. @end

应用程序之UIWebView的使用的更多相关文章

  1. ios学习之UIWebView网页视图

    转载于爱德凡的百度空间,地址:http://hi.baidu.com/aidfan/item/34a720866b33cbcdef083d37 UIWebView 使用详解 一.UIWebView加载 ...

  2. iOS应用程序内打开指定qq聊天、给某人打电话

    -(void)btn2Clik { UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero]; NSURL *url = [N ...

  3. ios开发入门- WebView使用

    转自:http://mahaile.blog.51cto.com/2891586/1021515/ 目标 : webview使用 在一些移动app中,有时程序会载入 外表的html 界面, andro ...

  4. UI控件(UIWebView)

    本文主要记录UIWebView三方面内容: 1.基本的加载网页链接或文件: 2.网页js调用原生,也就是Cordova混合架构的原理: 3.原生调用js程序: 原生部分主要代码: @implement ...

  5. iOS程序破解——获取.ipa程序包

    原文在此 首先肯定不是获取自己的ipa包. 为什么要获取ipa包呢?比如,在仿写一些程序时,避免不了获取它的图片素材等等,那么最快也是最有效的方式就是获取原程序的ipa包.更或者,你想要逆向分析某一款 ...

  6. WKWebView与JS交互,UIWebView+JavascriptCore和JS交互

    最近一直在做有关Swift和JavaScript交互的程序,所以有关UIWebView和WKWebView在使用上的差别在此总结下: UIWebView: (1)创建 var webView: UIW ...

  7. 微信小程序实质是什么? Hybrid App

    微信小程序是一种不需要下载安装即可使用的应用,用户扫一扫或者搜一下即可打开应用.微信小程序实质是Hybrid技术的应用.Hybrid App(混合模式移动应用). 小程序能够更多的可以更多的调用手机本 ...

  8. UIWebView的应用和其中的JS与OC间传值

    现在有很多的应用已经采用了WebView和html语言结合的开发模式.html5一直很火因为一份代码可以在多个平台上运用啊,效果各不相同都很美观,也越来越有一些公司直接招后台程序员和html5程序员, ...

  9. 25个增强iOS应用程序性能的提示和技巧(中级篇)(3)

    25个增强iOS应用程序性能的提示和技巧(中级篇)(3) 2013-04-16 14:42 破船之家 beyondvincent 字号:T | T 本文收集了25个关于可以提升程序性能的提示和技巧,分 ...

随机推荐

  1. linux内核分析之缺页中断【转】

    转自:http://blog.csdn.net/bullbat/article/details/7108402 linux缺页异常程序必须能够区分由编程引起的异常以及由引用属于进程地址空间但还尚未分配 ...

  2. bash shell 文本文件操作

    一.打开文本文档,查看文本的内容,我们最直观的方式就是用编辑器,并且可以使用vi内部的查找命令查找[参见Vim文字编辑] vi test.txt#使用vi打开当前目录下的test.txt文本 二.总结 ...

  3. centos6源码编译安装lnmp环境

    操作系统 版本 64位 CentOS-6.6    10.0.0.20 安装环境所需依赖包 yum -y install gcc automake autoconf libtool make gcc- ...

  4. Android 横向列表GridView 实现横向滚动

    Android 横向列表实现,可左右滑动,如下图 1.主界面布局代码:activity_main.xml a.包裹HorizontalScrollView控件是GirdView横向滚动的基本条件b.G ...

  5. JavaScript 性能优化的小知识总结

    前言 一直在学习 javascript,也有看过<犀利开发 Jquery 内核详解与实践>,对这本书的评价只有两个字犀利,可能是对 javascript 理解的还不够透彻异或是自己太笨,更 ...

  6. 小白书 黑白图像【DFS/Flood Fill】

    http://blog.csdn.net/u010470972/article/details/33415617 Description 输入一个n×n的黑白图像(1表示黑色,0表示白色),任务是统计 ...

  7. C++米勒拉宾算法模板

    //我也忘了从哪找来的板子,不过对于2^63级的数据请考虑使用java内置的米勒拉宾算法. 1 #include <iostream> #include <string> #i ...

  8. iOS9 Storyboard unwind segue反回传递事件时机详细步骤

    当返回上一个界面且需要上一个界面做某事时,用unwind segue实现起来比delegate简单许多,甚至有时不适合用delegate来实现,那么我们就用unwind segue吧,而且像1-> ...

  9. 更改vsftpd默认的21端口

    vsftpd默认的端口是21 我想更改为别的端口 那么首先编辑 vsftpd的配置文件 /etc/vsftpd/vsftpd.conf 添加监听端口 listen_port **** 然后修改ftp的 ...

  10. androd 获得wifi列表

    AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xm ...