UIWebView是iOS sdk中一個最常用的控件。是內置的瀏覽器控件,我們可以用它來瀏覽網頁、打開文檔等等,UIWebView能夠加載html/htm、pdf、docx、txt等格式的文件
UIWebView:->UIView同時遵守了滾動的協議
loadRequest:加載請求
NSURLRequest:請求類用于設置網絡請求相關信息如:網址、傳的內容、請求頭...
NSURL:路徑每個內容都有一個在萬維網中唯一的路徑
掛代理:<UIWebViewDelegate>
1.在viewDidLoad里面
self.edgesForExtendedLayout=UIRectEdgeNone;
myWebView= [[UIWebViewalloc]initWithFrame:[UIScreenmainScreen].bounds];
myWebView.delegate=self;
myWebView.scalesPageToFit=YES;
myWebView.allowsInlineMediaPlayback=YES;
[self.viewaddSubview:myWebView];
self.navigationItem.leftBarButtonItem= [[UIBarButtonItemalloc]initWithTitle:@"返回"style:UIBarButtonItemStylePlaintarget:selfaction:@selector(gotoBack)];
self.navigationItem.rightBarButtonItem= [[UIBarButtonItemalloc]initWithTitle:@"下一頁"style:UIBarButtonItemStylePlaintarget:selfaction:@selector(next)];
indicatorView= [[UIActivityIndicatorViewalloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
indicatorView.center=self.view.center;
[self.viewaddSubview:indicatorView];
NSString*path = [[NSBundlemainBundle]pathForResource:@"123"ofType:@"pdf"];
[selfloadWithURL:[NSURLURLWithString:@"http://www.chinacaipu.com/menu/dianxinshipin/118481.html"]];
- (void)loadWithURL:(NSURL*)url{
NSURLRequest*request = [NSURLRequestrequestWithURL:url];
[myWebViewloadRequest:request];?}
- (void)gotoBack{
[myWebViewgoBack];?}
- (void)next{
[myWebViewgoForward];?}
開始加載請求
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType{
[indicatorViewstartAnimating];?returnYES;?}
加載完成
- (void)webViewDidFinishLoad:(UIWebView*)webView{
[indicatorViewstopAnimating];?}
加載失敗
- (void)webView:(UIWebView*)webView didFailLoadWithError:(nullableNSError*)error{
if([errorisEqual:[NSNullnull]] !=YES) {
UIAlertAction*reloadAction = [UIAlertActionactionWithTitle:@"重新加載"style:UIAlertActionStyleDefaulthandler:^(UIAlertAction*_Nonnullaction) {
[selfloadWithURL:[NSURLURLWithString:@"https://www.baidu.com"]];?}];
UIAlertAction*cancelAction = [UIAlertActionactionWithTitle:@"取消"style:UIAlertActionStyleCancelhandler:^(UIAlertAction*_Nonnullaction) {?}];
NSString*errorMessage =@"";
if(error.code== -1009) {
errorMessage =@"網絡連接錯誤";?}
UIAlertController*alert = [UIAlertControlleralertControllerWithTitle:@"加載錯誤"message:errorMessagepreferredStyle:UIAlertControllerStyleAlert];
[alertaddAction:reloadAction];
[alertaddAction:cancelAction];
[selfpresentViewController:alertanimated:YEScompletion:nil];
NSLog(@"%@",error.userInfo);?}}
前往下一頁:goForward
self.navigationItem.rightBarButtonItem= [[UIBarButtonItemalloc]initWithTitle:@"下一頁"style:UIBarButtonItemStylePlaintarget:selfaction:@selector(next)];
返回上一頁:goBack?
self.navigationItem.leftBarButtonItem= [[UIBarButtonItemalloc]initWithTitle:@"返回"style:UIBarButtonItemStylePlaintarget:selfaction:@selector(gotoBack)];
scalesPageToFit讓加載的內容自適應設備
webView可以通過代理方法檢測加載內容的狀態
// 是否允許播放內鏈視頻 在手機上默認是NO
myWebView.allowsInlineMediaPlayback=YES;
代理方法
網頁開始加載的時候調用
-(void)webViewDidStartLoad:(UIWebView *)webView
網頁加載完成的時候調用
-(void)webViewDidFinishLoad:(UIWebView *)webView
網頁加載出錯的時候調用
-(void)webView:(UIWebView )webView didFailLoadWithError:(NSError )error
網頁中的每一個請求都會被觸發這個方法,返回NO代表不執行這個請求(常用于JS與iOS之間通訊)
-(BOOL)webView:(UIWebView )webView shouldStartLoadWithRequest:(NSURLRequest )request navigationType:(UIWebViewNavigationType)navigationType