通过KVO来获取网页页面title以及加载的进度值,代码如下
#import "WKWebviewController.h"
#import <WebKit/WebKit.h>
@interface WKWebviewController ()<WKUIDelegate,WKNavigationDelegate>
@property (nonatomic,strong) WKWebView *wkWebview;
@property (nonatomic,strong) UIProgressView *progress;
@end
@implementation WKWebviewController
#pragma mark --- wk
- (WKWebView *)wkWebview
{
if (_wkWebview == nil)
{
_wkWebview = [[WKWebView alloc]initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT)];
_wkWebview.UIDelegate = self;
_wkWebview.navigationDelegate = self;
_wkWebview.backgroundColor = [UIColor clearColor];
[self.view addSubview:_wkWebview];
}
return _wkWebview;
}
#pragma mark 加载进度条
- (UIProgressView *)progress
{
if (_progress == nil)
{
_progress = [[UIProgressView alloc]initWithFrame:CGRectMake(0, 64, WIDTH, 2)];
_progress.tintColor = [UIColor blueColor];
_progress.backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:_progress];
}
return _progress;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
//TODO:加载
[self.wkWebview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.urlString]]];
//TODO:kvo监听,获得页面title和加载进度值
[self.wkWebview addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:NULL];
[self.wkWebview addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:NULL];
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark KVO的监听代理
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
//加载进度值
if ([keyPath isEqualToString:@"estimatedProgress"])
{
if (object == self.wkWebview)
{
[self.progress setAlpha:1.0f];
[self.progress setProgress:self.wkWebview.estimatedProgress animated:YES];
if(self.wkWebview.estimatedProgress >= 1.0f)
{
[UIView animateWithDuration:0.5f
delay:0.3f
options:UIViewAnimationOptionCurveEaseOut
animations:^{
[self.progress setAlpha:0.0f];
}
completion:^(BOOL finished) {
[self.progress setProgress:0.0f animated:NO];
}];
}
}
else
{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
//网页title
else if ([keyPath isEqualToString:@"title"])
{
if (object == self.wkWebview)
{
self.title = self.wkWebview.title;
}
else
{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
else
{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
#pragma mark 移除观察者
- (void)dealloc
{
[self.wkWebview removeObserver:self forKeyPath:@"estimatedProgress"];
[self.wkWebview removeObserver:self forKeyPath:@"title"];
}
@end