iOS UIWebView的使用

WebView的使用

使用UIWebView可以实现一个内置的浏览器,而且可以直接将这个浏览器内嵌到应用的任意位置
UIWebView直接集成了UIView,一般不可以与用户交互
获取UIWebView对象后,可配置如下常用属性和方法


@property(nonatomic) BOOL scalesPageToFit;//该属性控制是否缩放网页以适应该控件
@property(nonatomic) UIDataDetectorTypes dataDetectorTypes NS_AVAILABLE_IOS(3_0);//该属性支持以下枚举
  • UIDataDetectorTypePhoneNumber //自动检测网页上的电话号码,点击会拨号
  • UIDataDetectorTypeLink //自动检测网页上的超级链接
  • UIDataDetectorTypeAddress //自动检测网页上的地址
  • UIDataDetectorTypeCalendarEvent //自动检测网页上的日历事件
  • UIDataDetectorTypeNone //不检测网页上的任何内容
  • UIDataDetectorTypeAll //自动检测网页上所有特殊内容
- (void)loadRequest:(NSURLRequest *)request;//加载显示URL网页请求

- (void)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;//加载HTML
@property (nullable, nonatomic, readonly, strong) NSURLRequest *request;//URL请求

 - (void)reload;//重新加载

- (void)stopLoading; //停止加载

- (void)goBack; //网页后退

- (void)goForward; //网页前进
- 

当UIWebView加载网页时,程序可为UIWebView设置一个delegate委托,该委托必须实现<UIWebViewDelegate>协议,该协议包括如下方法:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;//当UIWebView将要加载指定的URL请求时,激发该方法

- (void)webViewDidStartLoad:(UIWebView *)webView;//当开始加载时激发
- (void)webViewDidFinishLoad:(UIWebView *)webView;//当完成加载时激发
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error;//当加载错误时激发

通过下面实例代码来实现一个 迷你浏览器


@interface ViewController () <UIWebViewDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@property (weak, nonatomic) IBOutlet UITextField*addressBar;
@end

@implementationViewController{

    UIActivityIndicatorView *_activityIndizator;

}

- (void)viewDidLoad {

    [super viewDidLoad];

    //设置自动缩放网页以适应该控件

    self.webView.scalesPageToFit = YES;

    //为该控件设置委托

    //因为使用该控制器对象作为UIWebView控件的委托对象,所以该控制器类需要实现<UIWebViewDelegate>协议

    self.webView.delegate = self;

    //创建UIActivityIndicatorView控件,用来显示网页加载中

    _activityIndizator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)];

    //将UIActivityIndicatorView显示在当前View的中央

    [_activityIndizator setCenter:self.view.center];

    //设置样式

    _activityIndizator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;

    //将_activityIndizator添加到View 并隐藏

    [self.view addSubview:_activityIndizator];

    _activityIndizator.hidden = YES;

}

//点击前往打开网页

- (IBAction)goButton:(id)sender {

    [self.addressBar resignFirstResponder];

    //获取用户输入网址

    NSString *addressStr = self.addressBar.text;

    //如果用户输入的地址不包括http:// 则为用户添加http://

    if (![addressStr hasPrefix:@"http://"]) {

        addressStr = [NSString stringWithFormat:@"http://%@",addressStr];

        self.addressBar.text = addressStr;

    }

    //创建URL请求

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:addressStr]];

    //加载指定URL对应的网页

    [self.webView loadRequest:request];

}

//实现后退方法

- (IBAction)goBackButton:(id)sender {

    if (self.webView.canGoBack) {

        [self.webView goBack];
     }
}
//实现<UIWebViewDelegate>协议中的方法

//当WebView开始加载时

- (void)webViewDidStartLoad:(UIWebView *)webView{

    //显示_activityIndizator 并开始转动

    _activityIndizator.hidden = NO;

    [_activityIndizator startAnimating];
}
//当WebView完成加载时
- (void)webViewDidFinishLoad:(UIWebView *)webView{
    _activityIndizator.hidden = YES;
    [_activityIndizator stopAnimating];
}

//当WebView加载失败时
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error{

    //当加载错误时,用UIAlertController来显示错误信息
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"错误" message:error.localizedDescription preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *cancelAlert = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnullaction) {
    }];
    [alert addAction:cancelAlert];
    //显示Alert
    [self presentViewController:alert animated:YES completion:^{
       _activityIndizator.hidden = YES;

        [_activityIndizator stopAnimating];
   }];
}
- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end

最终通过代码可实现如下效果

最终结果

如果出现下面这个提示框 则说明网页加载失败

提示

错误原因是因为,默认在iOS9 后,苹果将原http协议改成了https协议,使用 TLS1.2 SSL加密请求数据。我们只需要为Info.plist如下字段即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,647评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,690评论 2 374
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,739评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,692评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,552评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,410评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,819评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,463评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,752评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,789评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,572评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,414评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,833评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,054评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,345评论 1 254
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,810评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,016评论 2 337

推荐阅读更多精彩内容

  • 现在对于 混合式 移动端开发越来越流行,因为开发成本上、速度上都比传统的APP开发要好,混合式开发是传统模式与P...
    丶绅士丿丨丨阅读 2,189评论 1 2
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,957评论 4 60
  • 你是个平凡的姑娘,平凡的出生,平凡的经历。平凡的过着日复一日,年复一年的平凡日子。 是,你没有多么出众的外表让人眼...
    馥菲凰梵阅读 385评论 0 1
  • Seeting 增加: INSTALLED_APPS = [ # 'django.contrib.admin', ...
    whong736阅读 495评论 0 3
  • 词:董书利你是一本书未轻易去翻那不加修饰的封面足以让我思绪万千 你宁愿是迷我无力承受失去也不想历史重演来祭奠自己的...
    星巢文化阅读 305评论 4 4