网络2-UIWebView

作者: Saxon_Geoffrey | 来源:发表于2015-03-18 15:45 被阅读2103次

    1.UIWebView

    UIWebView不仅能加载网络资源还可以加载本地资源,目前支持的常用的文档格式如:html、pdf、docx、txt等。

    UIWebView整个使用相当简单:创建URL->创建请求->加载请求,无论是加载本地文件还是Web内容都是这三个步骤。UIWebView内容加载事件同样是通过代理通知外界,常用的代理方法如开始加载、加载完成、加载出错等,这些方法通常可以帮助开发者更好的控制请求加载过程。

    加载资源:

    - (void)loadRequest:(NSURLRequest *)request;
    

    常用的属性和方法:

    //重新加载(刷新) 
    - (void)reload;
    //停⽌止加载    
    - (void)stopLoading;
    //回退     
    - (void)goBack;
    //前进    
    - (void)goForward;
    //需要进⾏检测的数据类型   
    @property(nonatomic) UIDataDetectorTypes dataDetectorTypes 
    //是否能回退 
    @property(nonatomic,readonly,getter=canGoBack) BOOL canGoBack;
    //是否能前进 
    @property(nonatomic,readonly,getter=canGoForward) BOOL canGoForward; 
    //是否正在加载中  
    @property(nonatomic,readonly,getter=isLoading) BOOL loading;
    //是否伸缩内容至适应屏幕当前尺寸 
    @property(nonatomic) BOOL scalesPageToFit; 
    

    遵守UIWebViewDelegate协议,监听UIWebView的加载过程:

    //开始发送请求(加载数据)时调用:
    - (void)webViewDidStartLoad:(UIWebView *)webView;
    //请求完毕(加载数据完毕)时调⽤:
    - (void)webViewDidFinishLoad:(UIWebView *)webView;
    //请求错误时调用:
    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;
    //监听UIWebView的加载过程:
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
    

    下面是一个例子:

    在storyBoard中拖入如下控件:

    searchBar的代理方法:

    -(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
        [self request:_searchBar.text];
        [searchBar resignFirstResponder];
    }
    

    加载searchBar中的请求:

    -(void)request:(NSString *)urlStr{
        //创建url
        NSURL *url;
        
        //如果file://开头的字符串则加载bundle中的文件
        if([urlStr hasPrefix:kFILEPROTOCOL]){
            //取得文件名
            NSRange range= [urlStr rangeOfString:kFILEPROTOCOL];
            NSString *fileName=[urlStr substringFromIndex:range.length];
            url=[[NSBundle mainBundle] URLForResource:fileName withExtension:nil];
        }else if(urlStr.length>0){
            //如果是http请求则直接打开网站
            if ([urlStr hasPrefix:@"http"]) {
                url=[NSURL URLWithString:urlStr];
            }else{//如果不符合任何协议则进行搜索
                urlStr=[NSString stringWithFormat:@"http://m.bing.com/search?q=%@",urlStr];
            }
            urlStr=[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];//url编码
            url=[NSURL URLWithString:urlStr];
            
        }
        //创建请求
        NSURLRequest *request=[NSURLRequest requestWithURL:url];
        //加载请求页面
        [_webView loadRequest:request];
    }
    

    WebView的代理方法:

    -(void)webViewDidStartLoad:(UIWebView *)webView{
        //显示网络请求加载
        [UIApplication sharedApplication].networkActivityIndicatorVisible=true;
    }
    
    -(void)webViewDidFinishLoad:(UIWebView *)webView{
        //隐藏网络请求加载图标
        [UIApplication sharedApplication].networkActivityIndicatorVisible=false;
        //设置按钮状态
        [self setBarButtonStatus];
    }
    
    -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
        NSLog(@"error detail:%@",error.localizedDescription);
        UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"系统提示" message:@"网络连接发生错误!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
        [alert show];
    }
    

    设置前进后退按钮:

    -(void)setBarButtonStatus{
        if (_webView.canGoBack) {
            _barButtonBack.enabled=YES;
        }else{
            _barButtonBack.enabled=NO;
        }
        if(_webView.canGoForward){
            _barButtonForward.enabled=YES;
        }else{
            _barButtonForward.enabled=NO;
        }
    }
    

    运行结果如下:

    你可以在这里下载到代码。

    - (void)getAccessToken:(NSString *)requestToken
    {
        [HttpTool postWithPath:@"oauth2/access_token" params:@{
           @"client_id" : kAppKey,
           @"client_secret" : kAppSecret,
           @"grant_type" : @"authorization_code",
           @"redirect_uri" : kRedirectURI,
           @"code" : requestToken
           } success:^(id JSON) {
               // 保存账号信息
               Account *account = [[Account alloc] init];
               account.accessToken = JSON[@"access_token"];
               account.uid = JSON[@"uid"];
               [[AccountTool sharedAccountTool] saveAccount:account];
               
               // 回到主页面
               ViewController *main = [[ViewController alloc]init];
               if (main) {
                   [self presentViewController:main animated:YES completion:nil];
               }
           } failure:^(NSError *error) {
               
               
           }];
    }
    
    

    相关文章

      网友评论

      本文标题:网络2-UIWebView

      本文链接:https://www.haomeiwen.com/subject/xgtwxttx.html