UIWebView
- 父類(lèi)是UIView
- 該控件專(zhuān)門(mén)用于顯示網(wǎng)頁(yè),相關(guān)的網(wǎng)絡(luò)知識(shí)詳見(jiàn)網(wǎng)絡(luò)
1 概念性知識(shí)
00 UIWebView是iOS內(nèi)置的瀏覽器控件
01 webView是有缺點(diǎn)的,會(huì)導(dǎo)致內(nèi)存泄露,而且這個(gè)問(wèn)題是它系統(tǒng)本身的問(wèn)題。
02 手機(jī)上面的safai其實(shí)就是用webView來(lái)實(shí)現(xiàn)的
03 現(xiàn)在的開(kāi)發(fā)并不完全是原生的開(kāi)發(fā),而更加傾向于原生+Html5的方式
04 webView是OC代碼和html代碼之間進(jìn)行交互的橋梁
05 UIWebView不但能加載遠(yuǎn)程的網(wǎng)頁(yè)資源,還能加載絕大部分的常見(jiàn)文件,如html、htm、pdf、doc、ppt、txt、mp4..
2 代碼相關(guān)
/*A*網(wǎng)頁(yè)操控相關(guān)方法**/
[self.webView goBack]; 回退
[self.webView goForward]; 前進(jìn)
[self.webView reload]; 刷新
[self.webView stopLoading]; 停止加載
//設(shè)置是否能夠前進(jìn)和回退;在網(wǎng)頁(yè)加載完畢后設(shè)置
self.goBackBtn.enabled = webView.canGoBack;//canGoBack只讀
self.fowardBtn.enabled = webView.canGoForward;//canGoForward只讀
/*B*常用的屬性設(shè)置**/
self.webView.scalesPageToFit = YES; 設(shè)置網(wǎng)頁(yè)自動(dòng)適應(yīng)
self.webView.dataDetectorTypes = UIDataDetectorTypeAll; 設(shè)置檢測(cè)網(wǎng)頁(yè)中的格式類(lèi)型,all表示檢測(cè)所有類(lèi)型包括超鏈接、電話(huà)號(hào)碼、地址等。
self.webView.scrollView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0);
/*C*相關(guān)代理方法**/
//每當(dāng)將加載請(qǐng)求的時(shí)候調(diào)用該方法,返回YES 表示加載該請(qǐng)求,返回NO 表示不加載該請(qǐng)求
//可以在該方法中攔截請(qǐng)求
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
return ![request.URL.absoluteString containsString:@"dushu"];
}
//開(kāi)始加載網(wǎng)頁(yè),不僅監(jiān)聽(tīng)我們指定的請(qǐng)求,還會(huì)監(jiān)聽(tīng)內(nèi)部發(fā)送的請(qǐng)求
-(void)webViewDidStartLoad:(UIWebView *)webView
//網(wǎng)頁(yè)加載完畢之后會(huì)調(diào)用該方法
-(void)webViewDidFinishLoad:(UIWebView *)webView
//網(wǎng)頁(yè)加載失敗調(diào)用該方法
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
/*D*其它知識(shí)點(diǎn)-加載本地資源**/
NSURL *url = [[NSBundle mainBundle] URLForResource:@"text.html" withExtension:nil];
[self.webView loadRequest:[NSURLRequest requestWithURL:url]];
UIWebView示例
@interface ViewController ()<UIWebViewDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *goBack;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *goforWard;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self test];
}
- (IBAction)goBackBtnClick:(id)sender
{
[self.webView goBack];
}
- (IBAction)goForWardBtnClick:(id)sender
{
[self.webView goForward];
}
- (IBAction)reloadBtnClick:(id)sender
{
[self.webView reload];
}
-(void)test
{
//創(chuàng)建請(qǐng)求對(duì)象
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//傳一個(gè)請(qǐng)求對(duì)象
[self.webView loadRequest:request];
//設(shè)置代理方法
self.webView.delegate = self;
}
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
self.goBack.enabled = self.webView.canGoBack;
self.goforWard.enabled = self.webView.canGoForward;
}
//當(dāng)即將加載網(wǎng)頁(yè)請(qǐng)求的時(shí)候調(diào)用
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"%@",request.URL.absoluteString);
//攔截
if ([request.URL.absoluteString containsString:@"dushu"])return NO;
//如果返回YES那么表示可以加載
//如果返回的是NO ,那么表示拒絕這個(gè)請(qǐng)求
return YES;
}
/*
方法調(diào)用順序:
http://www.baidu.com/
webViewDidStartLoad
https://m.baidu.com/?from=844b&vit=fps
webViewDidStartLoad
webViewDidFinishLoad
webViewDidFinishLoad
*/