學(xué)習(xí)一下WKWebView的使用 邊學(xué)邊寫 主要分享一下通過官方文檔學(xué)習(xí)一個框架的過程,好好學(xué)習(xí)天天向上 嘿嘿
主要就先看官方的文檔嘍
1.文檔中有這么一句話 替代UIWebView 這個類 那就應(yīng)該知道了這個類是用來干什么的了吧-展示網(wǎng)絡(luò)內(nèi)容的
instead of the older UIWebView class.
開始使用
1.初始化方法
引入這個頭文件<WebKit/WebKit.h>
可以看到WKWebView繼承于UIView 是個視圖類
新建一個空白的ViewController 在.m中添加屬性
@property(nonatomic,strong)WKWebView *webView;
文檔中提供了這樣一種初始化方法
initWithFrame:configuration:
這里需要倆個參數(shù),一個frame控制視圖大小,另一個暫時不懂只是知道要傳WKWebViewConfiguration這個類的對象矮男,根據(jù)字面理解應(yīng)該是一系列的配置信息類勋拟, 看了一下WKWebViewConfiguration這個類 繼承NSObject沒特別的初始化方法 那就先寫了
WKWebViewConfiguration *config=[[WKWebViewConfiguration alloc]init];
self.webView=[[WKWebView alloc] initWithFrame:self.view.frame configuration:config];
這樣視圖應(yīng)該創(chuàng)建完了括荡,但應(yīng)該還有一個加載網(wǎng)絡(luò)請求的方法吧疏遏,要不怎么加載網(wǎng)頁
文檔中找到一個這個方法
loadRequest:
嘗試寫一下 就用簡書的地址吧
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.reibang.com"]]];
然后在添加到控制器的視圖上
[self.view addSubview:self.webView];
運行一下看看,ok 加載成功目养!
上面不好看啊 把frame調(diào)一下吧修改一下代碼
self.webView=[[WKWebView alloc] initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height) configuration:config];
運行上面是狀態(tài)欄是黑色的了俩由。。癌蚁。幻梯。再加一句
self.view.backgroundColor=[UIColor whiteColor];
這下效果好多了
再多一點 嘿嘿
加載應(yīng)該是有延遲的,應(yīng)該有一個加載的狀態(tài)回調(diào)吧努释,這種情況找代理碘梢,看看有沒有什么代理方法,然后就找到了倆個代理伐蒂。煞躬。。逸邦。
navigationDelegate //The web view's navigation delegate.
UIDelegate//The web view's user interface delegate.
倆個代理看了恩沛,都沒有必須要實現(xiàn)的方法(沒有@required的),第一個說是視圖導(dǎo)航(這個怎么翻譯感覺好別扭)的代理 缕减,第二個是視圖與用戶交互的代理雷客。加載狀態(tài)應(yīng)該是在第一個代理里面,找啊找唄桥狡,文檔寫的很清楚了佛纫,分為哪些部分
設(shè)置一下代理<WKNavigationDelegate>協(xié)議遵守一下
self.webView.navigationDelegate=self;
選了這四個大概能看懂的
//網(wǎng)頁開始加載到視圖上
-(void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{
NSLog(@"%s",__FUNCTION__);
}
//網(wǎng)頁開始請求
-(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__);
}
控制臺打印順序
失敗的情況也試一下妓局,改亂了地址总放,結(jié)果等了半天沒走上面寫的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__);
}
有了這幾個代理方法可以做點交互優(yōu)化了甥啄,先加個簡單的hud,用個第三方的MBProgressHUD(這個很常用吧炬搭,應(yīng)該都會用)
//設(shè)置個屬性
@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__);
}
這樣等待的白屏能好一些體驗蜈漓,今天就學(xué)這些吧,也可以更新一下了 嘿嘿