A.基本使用
1.概念
iOS内置的浏览器控件
Safari浏览器就是通过UIWebView实现的
 
2.用途:制作简易浏览器
(1)基本请求
创建请求
加载请求
(2)代理监听webView加载,例如提示正在加载
(3)前进、后退
使用NavigationController,在底部加上导航栏(勾选showToolBar),加上回退和前进按钮
(4)给顶部导航栏加上地址栏
UISearchBar
代理监听“搜索”按钮,提取地址栏文本
 
 
 
 
 
  1. //
  2. // ViewController.m
  3. // UIWebViewdDemo
  4. //
  5. // Created by hellovoidworld on 15/1/30.
  6. // Copyright (c) 2015年 hellovoidworld. All rights reserved.
  7. //
  8.  
  9. #import "ViewController.h"
  10.  
  11. @interface ViewController () <UISearchBarDelegate, UIWebViewDelegate>
  12.  
  13. @property (weak, nonatomic) IBOutlet UIWebView *webView;
  14.  
  15. @property (weak, nonatomic) IBOutlet UIBarButtonItem *backButton;
  16. @property (weak, nonatomic) IBOutlet UIBarButtonItem *forwardButton;
  17. - (IBAction)back:(UIBarButtonItem *)sender;
  18. - (IBAction)forward:(UIBarButtonItem *)sender;
  19.  
  20. @end
  21.  
  22. @implementation ViewController
  23.  
  24. - (void)viewDidLoad {
  25. [super viewDidLoad];
  26. // Do any additional setup after loading the view, typically from a nib.
  27.  
  28. // 创建一个搜索栏
  29. UISearchBar *searchBar = [[UISearchBar alloc] init];
  30. searchBar.frame = CGRectMake(, , , );
  31. searchBar.delegate = self;
  32.  
  33. self.navigationItem.titleView = searchBar;
  34.  
  35. self.webView.delegate = self;
  36. }
  37.  
  38. - (IBAction)back:(UIBarButtonItem *)sender {
  39. NSLog(@"后退");
  40. [self.webView goBack];
  41. }
  42.  
  43. - (IBAction)forward:(UIBarButtonItem *)sender {
  44. NSLog(@"前进");
  45. [self.webView goForward];
  46. }
  47.  
  48. #pragma mark - UIWebViewDelegate
  49. - (void)webViewDidStartLoad:(UIWebView *)webView {
  50. NSLog(@"开始加载");
  51. }
  52.  
  53. - (void)webViewDidFinishLoad:(UIWebView *)webView {
  54. NSLog(@"完成加载");
  55.  
  56. // 设置后退、前进按钮
  57. if ([self.webView canGoBack]) {
  58. self.backButton.enabled = YES;
  59. } else {
  60. self.backButton.enabled = NO;
  61. }
  62.  
  63. if ([self.webView canGoForward]) {
  64. self.forwardButton.enabled = YES;
  65. } else {
  66. self.forwardButton.enabled = NO;
  67. }
  68. }
  69.  
  70. #pragma mark - UISearchBarDelegate
  71. /** 点击搜索按钮(虚拟键盘上) */
  72. - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
  73. NSString *str = searchBar.text;
  74. NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", str]];
  75. NSURLRequest *request = [NSURLRequest requestWithURL:url];
  76.  
  77. [self.webView loadRequest:request];
  78. }
  79.  
  80. @end
 
3.加载本地资源
html、txt、doc、ppt、MP4、pdf
直接请求即可
 
4.自动识别电话、邮箱、地址
    // 识别所有类型的数据
    self.webView.dataDetectorTypes = UIDataDetectorTypeAll;
 
B.其他用途
1.OC执行javascript
 
  1. /** 运行js代码 */
  2. - (IBAction)runJs {
  3. NSString *str = @"alert('hello, world!');";
  4. [self.webView stringByEvaluatingJavaScriptFromString:str];
  5. }
 
 
2.javascript调用OC
在javascript中发送网页请求,使用OC截取,根据内容判断调用相应方法
 
这里使用js代码呼出相册选择:
 
网页 & js 代码:
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>运行OC代码</title>
  8. </head>
  9. <body>
  10.  
  11. <script type="text/javascript">
  12. function runOC() {
  13. window.location.href="ios://openAlbum";
  14. }
  15. </script>
  16.  
  17. <input type="button" value="运行OC代码" onclick="runOC();" />
  18.  
  19. </body>
  20. </html>
 
OC代码:
  1. /** webView发送请求之前都会调用,可以拦截请求,选择加载(返回YES)还是不加载(返回NO)*/
  2. - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
  3.  
  4. // 拦截请求
  5. NSString *urlStr = request.URL.absoluteString;
  6. NSRange range = [urlStr rangeOfString:@"ios://"];
  7.  
  8. // 如果是ios请求
  9. if (range.length != ) {
  10. // 方法名
  11. NSString *method = [urlStr substringFromIndex:range.location + range.length];
  12.  
  13. // 包装SEL
  14. SEL selector = NSSelectorFromString(method);
  15.  
  16. // 执行方法
  17. [self performSelector:selector withObject:nil];
  18. }
  19.  
  20. return YES;
  21. }
  22.  
  23. /** 打开相册 */
  24. - (void) openAlbum {
  25. // 创建一个相片选择控制器
  26. UIImagePickerController *imagePC = [[UIImagePickerController alloc] init];
  27. [imagePC setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; // 使用相册来源
  28.  
  29. [self presentViewController:imagePC animated:YES completion:^{
  30. NSLog(@"呼出相册");
  31. }];
  32. }
 
 

[iOS基础控件 - 7.0] UIWebView的更多相关文章

  1. [iOS基础控件 - 6.0] UITableView

    A.需要掌握的 1.基本属性和方法 设置UITableView的dataSource.delegate UITableView多组数据和单组数据的展示 UITableViewCell的常见属性 UIT ...

  2. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  3. iOS 基础控件(下)

    上篇介绍了UIButton.UILabel.UIImageView和UITextField,这篇就简短一点介绍UIScrollView和UIAlertView. UIScrollView 顾名思义也知 ...

  4. [iOS基础控件 - 6.11.3] 私人通讯录Demo 控制器的数据传递、存储

    A.需求 1.搭建一个"私人通讯录"Demo 2.模拟登陆界面 账号 密码 记住密码开关 自动登陆开关 登陆按钮 3.退出注销 4.增删改查 5.恢复数据(取消修改)   这个代码 ...

  5. iOS基础 - 控件属性

    一.控件的属性 1.CGRect frame 1> 表示控件的位置和尺寸(以父控件的左上角为坐标原点(0, 0)) 2> 修改这个属性,可以调整控件的位置和尺寸 2.CGPoint cen ...

  6. [iOS基础控件 - 6.10.2] PickerView 自定义row内容 国家选择Demo

    A.需求 1.自定义一个UIView和xib,包含国家名和国旗显示 2.学习row的重用   B.实现步骤 1.准备plist文件和国旗图片     2.创建模型 // // Flag.h // Co ...

  7. [iOS基础控件 - 6.9.1] 聊天界面Demo 代码

    框架:   所有代码文件:   Model: // // Message.h // QQChatDemo // // Created by hellovoidworld on 14/12/8. // ...

  8. [iOS基础控件 - 6.9] 聊天界面Demo

    A.需求 做出一个类似于QQ.微信的聊天界面 1.每个cell包含发送时间.发送人(头像).发送信息 2.使用对方头像放在左边,我方头像在右边 3.对方信息使用白色背景对话框,我方信息使用蓝色背景对话 ...

  9. [iOS基础控件 - 6.7] 微博展示 使用代码自定义TableCell(动态尺寸)

    A.需求 1.类似于微博内容的展示 2.头像 3.名字 4.会员标志 5.内容 6.分割线 7.配图(可选,可有可无)   code source: https://github.com/hellov ...

随机推荐

  1. 带你认识HTML5中的WebSocket

    这篇文章主要介绍了带你认识HTML5中的WebSocket,本文讲解了HTML5 中的 WebSocket API 是个什么东东.HTML5 中的 WebSocket API 的用法.带Socket. ...

  2. volicity语法学习和总结

    Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象.当Velocit ...

  3. bzoj2395

    分组赛时学到的最小乘积生成树模型,感觉这个思路非常神,可以说是数形结合的经典问题 由于生成树有两个权值,我们把每个生成树的权值表示成点坐标(sa,sb) 显然我们知道,乘积最小,那么点必然落在下凸壳上 ...

  4. linq xml读取

    <?xml version="1.0" encoding="UTF-8" ?> <cache> <chatOld> < ...

  5. UVALive 3661 Animal Run(最短路解最小割)

    题意:动物要逃跑,工作人员要截断从START(左上角)到END(右下角)的道路,每条边权表示拦截该条道路需要多少工作人员.问最少需要多少人才能完成拦截. 通俗地讲,就是把图一分为二所造成消耗的最小值. ...

  6. HDU 4638 Group ★(树状数组)

    题意 询问一段区间里的数能组成多少段连续的数. 思路 先考虑从左往右一个数一个数添加,考虑当前添加了i - 1个数的答案是x,那么可以看出添加完i个数后的答案是根据a[i]-1和a[i]+1是否已经添 ...

  7. FFmpeg 维基百科

    FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影.转换.流功能[1],包含了libavcodec ─这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频 ...

  8. XtraGrid的若干种用法 z

    支持多种类型的数据集合作为数据源 XtraGrid与传统的DataGridView一样,支持多种类型作为其数据源.下面例子是将DataTable, List<T>和数组分别绑定到XtraG ...

  9. Reading or Writing to Another Processes Memory in C# z

    http://www.jarloo.com/reading-and-writing-to-memory/ Declarations [Flags] public enum ProcessAccessF ...

  10. 仿酷狗音乐播放器开发日志二十四 选项设置窗体的实现(附328行xml布局源码)

    转载请说明原出处,谢谢~~ 花了两天时间把仿酷狗的选项设置窗体做出来了,当然了只是做了外观.现在开学了,写代码的时间减少,所以整个仿酷狗的工程开发速度减慢了.今天把仿酷狗的选项设置窗体的布局代码分享出 ...