学习一下WKWebView的使用 边学边写 主要分享一下通过官方文档学习一个框架的过程,好好学习天天向上 嘿嘿
主要就先看官方的文档喽
1.文档中有这么一句话 替代UIWebView 这个类 那就应该知道了这个类是用来干什么的了吧-展示网络内容的
instead of the older UIWebView class.
开始使用
1.初始化方法
引入这个头文件<WebKit/WebKit.h>
可以看到WKWebView继承于UIView 是个视图类
新建一个空白的ViewController 在.m中添加属性
@property(nonatomic,strong)WKWebView *webView;
文档中提供了这样一种初始化方法
initWithFrame:configuration:
这里需要俩个参数,一个frame控制视图大小,另一个暂时不懂只是知道要传WKWebViewConfiguration这个类的对象,根据字面理解应该是一系列的配置信息类, 看了一下WKWebViewConfiguration这个类 继承NSObject没特别的初始化方法 那就先写了
WKWebViewConfiguration *config=[[WKWebViewConfiguration alloc]init];
self.webView=[[WKWebView alloc] initWithFrame:self.view.frame configuration:config];
这样视图应该创建完了,但应该还有一个加载网络请求的方法吧,要不怎么加载网页
文档中找到一个这个方法
loadRequest:
尝试写一下 就用简书的地址吧
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.jianshu.com"]]];
然后在添加到控制器的视图上
[self.view addSubview:self.webView];
运行一下看看,ok 加载成功!
上面不好看啊 把frame调一下吧修改一下代码
self.webView=[[WKWebView alloc] initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height) configuration:config];
运行上面是状态栏是黑色的了。。。。再加一句
self.view.backgroundColor=[UIColor whiteColor];
这下效果好多了
再多一点 嘿嘿
加载应该是有延迟的,应该有一个加载的状态回调吧,这种情况找代理,看看有没有什么代理方法,然后就找到了俩个代理。。。。
navigationDelegate //The web view's navigation delegate.
UIDelegate//The web view's user interface delegate.
俩个代理看了,都没有必须要实现的方法(没有@required的),第一个说是视图导航(这个怎么翻译感觉好别扭)的代理 ,第二个是视图与用户交互的代理。加载状态应该是在第一个代理里面,找啊找呗,文档写的很清楚了,分为哪些部分
设置一下代理<WKNavigationDelegate>协议遵守一下
self.webView.navigationDelegate=self;
选了这四个大概能看懂的
//网页开始加载到视图上
-(void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{
NSLog(@"%s",__FUNCTION__);
}
//网页开始请求
-(void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
NSLog(@"%s",__FUNCTION__);
}
//加载失败
-(void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error{
NSLog(@"%s",__FUNCTION__);
}
//加载完成
-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
NSLog(@"%s",__FUNCTION__);
}
控制台打印顺序
失败的情况也试一下,改乱了地址,结果等了半天没走上面写的fail代理。。。
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.jiandsfwewerhu.com"]]];
原来走的是这个代理方法
-(void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error{
NSLog(@"%s",__FUNCTION__);
}
有了这几个代理方法可以做点交互优化了,先加个简单的hud,用个第三方的MBProgressHUD(这个很常用吧,应该都会用)
//设置个属性
@property (strong, nonatomic) MBProgressHUD *hud;
//开始的代理里添加hud
-(void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
NSLog(@"%s",__FUNCTION__);
self.hud=[MBProgressHUD showHUDAddedTo:self.view animated:YES];
}
//失败或者加载完成添加hud的隐藏 开始展示就隐藏hud
-(void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{
[self.hud hideAnimated:YES];
NSLog(@"%s",__FUNCTION__);
}
这样等待的白屏能好一些体验,今天就学这些吧,也可以更新一下了 嘿嘿