转自 http://blog.csdn.net/totogo2010/article/details/7686164

[cpp] view plain copy

  1. #import <UIKit/UIKit.h>
  2. @interface ViewController : UIViewController
  3. {
  4. UIWebView *webView;
  5. }
  6. @end

[cpp] view plain copy

  1. ViewController.m

[cpp] view plain copy

  1. - (void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4. webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
  5. NSURLRequest *request =[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
  6. [self.view addSubview: webView];
  7. [webView loadRequest:request];
  8. }
  9. 手机的网络环境是实时变化的,网络慢的时候,怎么提示用户网页正在打开呢?在网页打开出错的时候怎么提示用户呢?这时候我们就需要知道网页什么时候打开的,

    什么时候加载完成,什么时候出错了。那么我们需要实现这个<UIWebViewDelegate>协议

    3、实现协议,在ViewController.h修改如下:

    [cpp] view plain copy

    1. #import <UIKit/UIKit.h>
    2. @interface ViewController : UIViewController<UIWebViewDelegate>
    3. {
    4. UIWebView *webView;
    5. }
    6. @end

    UIWebView中几个重要的函数

    1.- (void )webViewDidStartLoad:(UIWebView  *)webView   网页开始加载的时候调用

    2.- (void )webViewDidFinishLoad:(UIWebView  *)webView  网页加载完成的时候调用

    3.- (void)webView:(UIWebView *)webView  didFailLoadWithError:(NSError *)error 网页加载错误的时候调用

    4、实现这三个方法,加入NSLog。

    先在viewDidLoad 的webView实例化下面加上

    [webView setDelegate:self];设置代理。这样上面的三个方法才能得到回调。

    三个方法实现如下: 

    1. - (void) webViewDidStartLoad:(UIWebView *)webView
    2. {
    3. NSLog(@"webViewDidStartLoad");
    4. }
    5. - (void) webViewDidFinishLoad:(UIWebView *)webView
    6. {
    7. NSLog(@"webViewDidFinishLoad");
    8. }
    9. - (void) webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
    10. {
    11. NSLog(@"didFailLoadWithError:%@", error);
    12. }

    运行打印:

    2012-06-23 15:20:29.728 WebViewDemo[1001:f803] webViewDidStartLoad

    2012-06-23 15:20:29.991 WebViewDemo[1001:f803] webViewDidFinishLoad

    那我们试试error情况,把wifi关掉,运行打印结果:

    2012-06-23 15:23:58.939 WebViewDemo[1087:f803] webViewDidStartLoad

    2012-06-23 15:23:59.016 WebViewDemo[1087:f803] webViewDidFinishLoad

    请求结果不变,为什么关掉网络还成功了呢?缓存?我换163.com试试,这是真正的结果出来了:

    2012-06-23 15:24:41.131 WebViewDemo[1134:f803] webViewDidStartLoad

    2012-06-23 15:24:41.149 WebViewDemo[1134:f803] didFailLoadWithError:Error Domain=NSURLErrorDomain Code=-1009 "The Internet connection appears to be offline." UserInfo=0x6b41660 {NSErrorFailingURLStringKey=http://www.163.com/, NSErrorFailingURLKey=http://www.163.com/, NSLocalizedDescription=The Internet connection appears to be offline., NSUnderlyingError=0x6eae690 "The Internet connection appears to be offline."}

    连接错误了,调用了didFailLoadWithError。

    5、加载等待界面

    为了给用户更直观的界面效果,我们加上等待的loading界面试试

    在webViewDidStartLoad加入等待

    1. (void) webViewDidStartLoad:(UIWebView *)webView
    2. {
    3. //创建UIActivityIndicatorView背底半透明View
    4. UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    5. [view setTag:108];
    6. [view setBackgroundColor:[UIColor blackColor]];
    7. [view setAlpha:0.5];
    8. [self.view addSubview:view];
    9. activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
    10. [activityIndicator setCenter:view.center];
    11. [activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhite];
    12. [view addSubview:activityIndicator];
    13. [activityIndicator startAnimating];

    加载完成或失败时,去掉loading效果

    [cpp] view plain copy

    1. - (void) webViewDidFinishLoad:(UIWebView *)webView
    2. {
    3. [activityIndicator stopAnimating];
    4. UIView *view = (UIView*)[self.view viewWithTag:108];
    5. [view removeFromSuperview];
    6. NSLog(@"webViewDidFinishLoad");
    7. }
    8. - (void) webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
    9. {
    10. [activityIndicator stopAnimating];
    11. UIView *view = (UIView*)[self.view viewWithTag:108];
    12. [view removeFromSuperview];
    13. }

转载于:https://www.cnblogs.com/SnowStark/p/5692103.html

iOS开发之 WebView相关推荐

  1. iOS开发之AVKit框架使用

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...

  2. (0045) iOS 开发之MBProgressHUD 源码学习

    (0045) iOS 开发之MBProgressHUD 源码学习 第一部分:学习所得和分析线程 1.  学习到了kvo 的使用 和屏幕方向的旋转判断. 2. 如果调起这个 HUD 的方法不是在主线程调 ...

  3. (0016)iOS 开发之Mac上Navicat Premium 创建远程连接和本地连接

    1.下载安装 (百度云盘里面有安装文件和注册机) 链接: https://pan.baidu.com/s/1kVG1k71 密码: mr5g 破解教程看这篇博客:http://blog.csdn.ne ...

  4. 李洪强iOS开发之RunLoop的原理和核心机制

    李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...

  5. IOS开发之MD5加密和钥匙串的使用-oc

    IOS开发之MD5加密和钥匙串的使用-oc 源码在我的主页,md5加密是用户登录安全的一个保障.不可逆的,可以暴力破解的. // // ViewController.m // MD5演练 // // ...

  6. IOS开发之CALayer基本属性和使用

    IOS开发之CALayer基本属性和使用 // // ViewController.m // CALayer // // Created by 鲁军 on 2021/2/21. //#import & ...

  7. ios开发之plist 的文件的读写以及沙盒容器路径打印

    ios开发之plist 的文件的读写以及沙盒容器路径打印 核心代码在这里 // // ViewController.m // 21-plist存储和沙盒路径 // // Created by 鲁军 o ...

  8. IOS开发之JSON文件的读写

    IOS开发之JSON文件的读写 // // ViewController.m // 20-JSON的读写 // // Created by 鲁军 on 2021/2/13. //#import &qu ...

  9. IOS开发之JSON序列化从客户端发送到服务器端

    IOS开发之JSON序列化从客户端发送到服务端的准备工作 共有6种情况 需要序列化 请查看源代码. 服务器端接受我们采用的是java的Tomcat服务器.配合 struts 2 controller框 ...

  10. IOS开发之UI基础LOL英雄展示-15

    IOS开发之UI基础LOL英雄展示-15 // // ViewController.m // 15-英雄展示-单组数据 // // Created by 鲁军 on 2021/2/3. //#impo ...

最新文章

  1. VC++ 字符串操作学习总结
  2. 再见,REST,你好,gRPC
  3. jquery批量删除
  4. 通过sql server的作业调度+存储过程来实现系统定时任务的方法
  5. native2ascii编码转换
  6. 根据城市的三字代码查询经纬度_中国国内机场三字码及经纬度
  7. linux ipv6 前缀 定义,IPv6 地址前缀
  8. (二)PUN 2基本教程
  9. 【java-JDK的下载-安装-配置】
  10. 数理统计内容整理(一)基本概念
  11. java-之冒泡排序法
  12. lisp倒入excel数据画图_将excel数据导入CAD画图的方法
  13. java帮助中心_Java | 保利威帮助中心 - Part 9
  14. Git从本地向TFS push项目
  15. Spring之XML解析
  16. 简述计算机仿真的基本步骤,计算机仿真技术试卷.doc
  17. Maven实现多环境打包
  18. matlab保存txt
  19. Mac5款高效实用软件,值得推荐
  20. 初窥门径——通过游戏人物建模来窥探python的对象模型

热门文章

  1. linux mk文件6,linux_2.6.30.4_Makefile_3--Makefile学习笔记
  2. c语言程序不知道头结点输出链表,C语言,不带头结点的链表,利用头插法存入信息,然后输出,没有error,却运行不了,求大神指点...
  3. 交通部 城轨交通运营管理规定_韩国又松大学热门专业-轨道交通运营与管理专业介绍...
  4. html怎么让字体自动变色,html怎么给字体设置颜色
  5. boxplot函数--Matplotlib
  6. 恐怖的死亡艺术,稻川淳二为自己办了场VR葬礼
  7. JVM Troubleshooting
  8. 基于IDEA 最新Spirng3.2+hibernate4+struts2.3 全注解配置 登录
  9. mongoose的用法(注:连接数据库)
  10. linux之程序包管理器(rpm)