1 webView的使用
- 優(yōu)點(diǎn):能在當(dāng)前app中打開網(wǎng)址,適配 iOS7
- 缺點(diǎn):沒有功能,如果需要功能,只能自己實(shí)現(xiàn)
1.1 webView加載網(wǎng)頁
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 設(shè)置內(nèi)邊距
self.webView.scrollView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0);
//內(nèi)容是否自適應(yīng)
self.webView.scalesPageToFit = YES;
[self.webView loadRequest:request];
1.2 webView加載本地文件
NSURL *url = [NSURL fileURLWithPath:@"/Users/Desktop/123.mp4"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
1.3 webView加載本地html
NSURL *url = [[NSBundle mainBundle] URLForResource:@"text.html" withExtension:nil];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 檢測特殊字符的樣式
self.webView.dataDetectorTypes = UIDataDetectorTypeAll;
[self.webView loadRequest:request];
1.4 webView的前進(jìn)/后退/刷新
- (void)viewDidLoad {
[super viewDidLoad];
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
// 先要遵守UIWebViewDelegate代理
self.webView.delegate = self;
}
- (IBAction)goBackBtnClick:(id)sender {
[self.webView goBack];
}
- (IBAction)goForwardBtnClick:(id)sender {
[self.webView goForward];
}
- (IBAction)reloadBtnClick:(id)sender {
[self.webView reload];
}
#pragma mark UIWebViewDelegate
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
self.goBack.enabled = self.webView.canGoBack;
self.goForward.enabled = self.webView.canGoForward;
}
2 SFSafariViewController的使用
- 優(yōu)點(diǎn):把Safari封裝成了一個控制器
- 缺點(diǎn):iOS9以后才能使用
- 使用步驟:
1.導(dǎo)入#import <SafariServices/SafariServices.h>
2.推薦使用Modal,但也可以使用 push
NSURL *url = [NSURL URLWithString:item.url];
SFSafariViewController *safariVc = [[SFSafariViewController alloc] initWithURL:url];
1.push的方式
// SFSafariViewController頂部條 會與 導(dǎo)航條沖突,顯示頂部條,一定要記得隱藏導(dǎo)航條
self.navigationController.navigationBar.hidden = YES;
safariVc.delegate = self; // 遵守SFSafariViewControllerDelegate代理
[self.navigationController pushViewController:safariVc animated:YES];
// 默認(rèn)不能返回,需要在代理方法中作返回處理
-(void)safariViewControllerDidFinish:(SFSafariViewController *)controller {
[self.navigationController popViewControllerAnimated:YES];
}
2.Model 的方式
[self presentViewController:safariVc animated:YES completion:nil];
備注:具備返回的功能,不需要額外處理(推薦)
3 WKWebView控件 (UIWebView 的升級版)
-優(yōu)點(diǎn):可以監(jiān)聽進(jìn)度條,比UIWebView功能更加多
-缺點(diǎn): iOS 8以后
-使用:1.#import <WebKit/WebKit.h> 2.需要手動把WebKit框架編譯
- (void)viewDidLoad {
[super viewDidLoad];
WKWebView *webView = [[WKWebView alloc] init];
[_contentView addSubview:webView];
// 添加底部額外滾動區(qū)域
webView.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 44, 0);
// 展示網(wǎng)頁
NSURLRequest *request = [NSURLRequest requestWithURL:_url];
[webView loadRequest:request];
// 前進(jìn),后退,刷新,進(jìn)度條
// KVO監(jiān)聽屬性
// Observer:觀察者
// KeyPath:監(jiān)聽哪個屬性
// options:NSKeyValueObservingOptionNew,監(jiān)聽新值改變
[webView addObserver:self forKeyPath:@"canGoBack" options:NSKeyValueObservingOptionNew context:nil];
[webView addObserver:self forKeyPath:@"canGoForward" options:NSKeyValueObservingOptionNew context:nil];
[webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
[webView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:nil];
}
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
WKWebView *webView = _contentView.subviews[0];
webView.frame = _contentView.bounds;
}
// 監(jiān)聽屬性有新值就會調(diào)用
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{
_backItem.enabled = _webView.canGoBack;
_forwardItem.enabled = _webView.canGoForward;
_progressView.progress = _webView.estimatedProgress;
_progressView.hidden = _webView.estimatedProgress>= 1;
self.title = _webView.title;
}
// 對象即將銷毀,移除觀察者
- (void)dealloc
{
[_webView removeObserver:self forKeyPath:@"canGoBack"];
[_webView removeObserver:self forKeyPath:@"canGoForward"];
[_webView removeObserver:self forKeyPath:@"estimatedProgress"];
[_webView removeObserver:self forKeyPath:@"title"];
}
// 后退
- (IBAction)back:(id)sender {
[_webView goBack];
}
// 前進(jìn)
- (IBAction)forward:(id)sender {
[_webView goForward];
}
// 刷新
- (IBAction)refresh:(id)sender {
[_webView reload];
}