#import "SLWebViewController.h"
#import <WebKit/WebKit.h>
@interface SLWebViewController ()
@property (weak, nonatomic) IBOutlet UIView *contentView;
@property (nonatomic, weak) WKWebView *webView;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *backItem;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *forwardItem;
@property (weak, nonatomic) IBOutlet UIProgressView *progressView;
@end
@implementation SLWebViewController
// 前進
- (IBAction)goForward:(id)sender {
[_webView goBack];
}
// 后退
- (IBAction)goBack:(id)sender {
[_webView goForward];
}
// 刷新
- (IBAction)refresh:(id)sender {
[_webView reload];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
// 添加webView
WKWebView *webView = [[WKWebView alloc] init];
_webView = webView;
[self.contentView addSubview:webView];
_webView.backgroundColor = [UIColor grayColor];
// 展示網(wǎng)頁
NSURLRequest *request = [NSURLRequest requestWithURL:_url];
[webView loadRequest:request];
// KVO 監(jiān)聽屬性改變
/*
Observer: 觀察者
KeyPath: 觀察webView哪些屬性
options: NSKeyValueObservingOptionNew: 觀察他的新的值的改變
KVO注意點: 一定要移除
*/
[webView addObserver:self forKeyPath:@"canGoBack" options:NSKeyValueObservingOptionNew context:nil];
[webView addObserver:self forKeyPath:@"canGoForward" options:NSKeyValueObservingOptionNew context:nil];
[webView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:nil];
// 進度條
[webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
}
- (void)dealloc
{
[self.webView removeObserver:self forKeyPath:@"canGoBack"];
[self.webView removeObserver:self forKeyPath:@"canGoForward"];
[self.webView removeObserver:self forKeyPath:@"title"];
[self.webView removeObserver:self forKeyPath:@"estimatedProgress"];
}
// 只要觀察的對象屬性有新值就會調(diào)用
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
NSLog(@"%d, %d", self.webView.canGoForward, self.webView.canGoBack);
self.backItem.enabled = self.webView.canGoBack;
self.forwardItem.enabled = self.webView.canGoForward;
self.title = self.webView.title;
self.progressView.progress = self.webView.estimatedProgress;
self.progressView.hidden = self.webView.estimatedProgress >= 1;
}
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
_webView.frame = self.contentView.bounds;
}
【注意】:KVO一定要銷毀:否則會在界面消失以后,造成程序崩潰
崩潰原因:reason: An instance 0x7fc701825400 of class WKWebView was deallocated while key value observers were still registered with it.
就是說:WKWebView被銷毀以后,但是它的鍵值對仍然被注冊監(jiān)聽
最后編輯于 :2017.12.05 06:06:57
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者 【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。 平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。