zoukankan      html  css  js  c++  java
  • UIWebView 使用

     
    基于手机 网络环境问题在UIWebView控件使用的时候,程序习惯添加UIActivityIndicatorView用以控制UIWebview的加载等待,在等待的时间内用户不允许操作,所以我们还要在当前的UIWebview上添加一个透明的view(opaqueview)用以防止用户点击,然后把UIActivityIndicatorView添加到我们自己定义的view(opaqueview)上。这样当网页加载开始的时候我们把UIActivityIndicatorView打开,当网页加载完毕的时候我们可以取消UIActivityIndicatorView,从而实现了对UIWebView的加载等待。

    一.UIWebView加载的时候通常有几种方法

    1.loadRequest:
    2.loadHTMLString:string  baseURL:
    3.loadData:MIMEType:textEncodingName:baseURL:

    其中baseURL 是指基准的url 是一个绝对的地址,程序要用到的其他资源就可以根据这个基准地址进行查找而不用再次定位到绝对地址;

    二.UIWebView中几个重要的函数
    1.- (void )webViewDidStartLoad:(UIWebView  *)webView   网页开始加载的时候调用

    2.- (void )webViewDidFinishLoad:(UIWebView  *)webView  网页加载完成的时候调用

    3.-(BOOL )webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType )navigationType

    当程序以UIWebView加载方式1进行加载的时候就会调用到此函数,然后执行webViewDidStartLoad函数,所以我们可以在此函数中进行一些请求解析,URL地址分析的工作。

    4.- (void)webView:(UIWebView *)webView  didFailLoadWithError:(NSError *)error
    是一个可选的函数,如果页面加载失败可以根据不同的错误类型反馈给用户不同的信息

    三.代码实现

    1.在.h文件中加载声明UIWebviewDelegate协议

    声明WebView

    2.实现UIWebView

    WebView  = [[ UIWebView   alloc]  initWithFrame: CGRectMake(x,x,x,x )];

    [ WebView   setUserInteractionEnabled: YES ];  //是否支持交互

    [ WebView   setDelegate: self ];  //委托

    [ WebView   setOpaque: NO ];  //透明

    [ self . view  addSubview : WebView];  //加载到自己的view

    url = [[ NSURL alloc ] initWithString :@"http:"];

    [ WebView loadRequest:[ NSURLRequest requestWithURL: url ]];  //笔者习惯采用loadRequest方式,你可以采用其他方式

    opaqueview = [[ UIView   alloc]  initWithFrame: CGRectMake(x ,  x ,  x ,  x )];        //opaqueview 需要在.h文件中进行声明用以做UIActivityIndicatorView的容器view;

    activityIndicator  = [[ UIActivityIndicatorView   alloc]  initWithFrame: CGRectMake( x ,  x ,  x ,  x )];//需要在.h文件中进行声明

    [ activityIndicator  setCenter :  opaqueview. center ];

    [ activityIndicator   setActivityIndicatorViewStyle: UIActivityIndicatorViewStyleWhite];  //颜色根据不同的界面自己调整

    [ opaqueview  setBackgroundColor:[ UIColor   blackColor]];

    [ opaqueview  setAlpha: 0.6 ];

    [ self . view  addSubview :  opaqueview];

    [ opaqueview  addSubview : activityIndicator];

    接下来添加

    - (void )webViewDidFinishLoad:(UIWebView *)webView {

    [activityIndicator stopAnimating];

    opaqueview.hidden  = YES ;
    }

    - (void )webViewDidStartLoad:(UIWebView *)webView {     

    [ activityIndicator startAnimating ]; 

    opaqueview.hidden  = NO ;

    }

    这样就简单的实现了UIWebView控件的加载使用,不同的页面均有加载的等待。

    ****js调用iphone中的方法的实现*****
    假设html中的代码为:
    <body>
    <div style="-webkit-text-size-adjust:150%">
    <h2>Title</h2>
    The page title is displayed in the navigation bar automatically. 
    <p>
    <img src="moonlight.jpg" alt="picture" title="moonlight" />
    <p>
    <a href="javascript:clickLink();">More Information</>
    <script>
    function sendCommand(cmd,param){
    var url="testapp:"+cmd+":"+param;
    document.location = url;
    }
    function clickLink(){
    sendCommand("alert","Muhahahaha");
    }
    </script>
    </body>

    iphone中的代码为:

    - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
    NSString *requestString = [[request URL] absoluteString];
    NSArray *components = [requestString componentsSeparatedByString:@":"];
    if ([components count] > 1 && [(NSString *)[components objectAtIndex:0] isEqualToString:@"testapp"]) {
    if([(NSString *)[components objectAtIndex:1] isEqualToString:@"alert"]) 
    {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert from Cocoa Touch message:[components objectAtIndex:2] delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [alert show];
    }
    return NO;
    }
    return YES;
    }

     

     
  • 相关阅读:
    顶点着色器详解 (Vertex Shaders)
    Texture Filter中的Bilinear、Trilinear以及Anistropic Filtering
    mysql远程访问1045的问题解决
    在eclipse上集成安装阿里巴巴代码规约P3C插件
    Mybatis Generator主要配置详解
    redis cluster最简配置
    springboot +redis配置
    redis cluster的conf配置文件配置
    MySQL与Oracle的主要区别
    java EE中使用PO和VO的注意事项
  • 原文地址:https://www.cnblogs.com/Sucri/p/4644864.html
Copyright © 2011-2022 走看看