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

[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. 注册表删除chrome插件

    注册表,对于绝大部分人来说,都是一个比较陌生的东西.然而,我们的几乎所有软件都会在这里出现. 就最近一次,公司给每个员工的chrome浏览器绑定的一堆插件,并且无法删除.手动删除插件文件后,重启机器又 ...

  2. SetCapture、ReleaseCapture、GetCapture

    正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口.如果调用了SetCapture,之后无论鼠标的位置在哪,鼠标消息都发给指定的这个窗口,直到调用ReleaseCapture或者调用S ...

  3. POJ 3233 矩阵乘法

    题意:求解A+A^2+...+A^k 题解: 1)利用通和公式,原式=(A^k+1 - A)(A - O)^-1 时间复杂度O(n^3lgk) 2)递归求解,A+A^2+...+A^k=(A+A^2+ ...

  4. 函数fsp_alloc_from_free_frag

    /**********************************************************************//** Allocates a single free ...

  5. JAVA调用易信接口向指定好友推送消息(二)POST测试

    易信的API接口做的还算简单 http://open.yixin.im/document/oauth/api 根据指南上的步骤,利用易信提供的测试ID AppID(client_id): yxbbd0 ...

  6. 服务器发布MVC常见问题解决方案

    1  问题:IIS上部署MVC网站,打开后500错误:处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelin ...

  7. HDU 3336 (KMP next性质) Count the string

    直接上传送门好了,我觉得他分析得非常透彻. http://972169909-qq-com.iteye.com/blog/1114968 #include <cstdio> #includ ...

  8. QQ在线图标 离线 QQ开通在线QQ服务 QQ陌生人直接聊天

           如图  永远都显示离线,即使QQ在线也显示离线的原因和解决方法   1:打开 这个页面  提示你开通  你就点击一下开通  这样头像就可以正常显示 离线 和在线了 http://wp.q ...

  9. mysql的MMM高可用方案

    1    MMM高可用mysql方案 1.1  方案简介 MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复 ...

  10. CentOS SVN服务器安装配置小记

    SVN的安装 安装很简单,尤其对于CentOS这种,直接: # yum install subversion# yum install mod_dav_svn 不同发行版的Package安装方法参见h ...