• iOS 获取UIWebView上面的按钮点击事件


    UIWebView的一些用法总结的网址 http://blog.csdn.net/zhaoweixing1989/article/details/13021513

    在网上看到很多文章都说iOS的UIWebView比较耗内存,在我的项目中,最开始我也是用UIWebView来加载网页的。刚开始加载的是自己拼接成的Html,后来在Html中加入一个按钮,点击之后用当前的UIWebView去加载网络上的网页。程序跑起来发现非常耗内存,加载几个网上的网页之后就爆内存警告了,不处理的话很容易被评估拒掉app。后来就改成用系统的safari浏览器来打开网络上的网页,把着耗内存的工作交给苹果自己自带的浏览器来处理,就避免了我这个app crash。但是怎么获取网页上这个按钮点击的事件呢,这个按钮本身就绑定了一个url,怎么让它点击之后当前的UIWebView不去load这个url呢。

    后来查了一下资料,发现UIWebView的协议里面有这么个方法,可以获取它加载的网页上面的事件,比如单击了图片,单击了按钮等等。

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

    {

    //判断是否是单击

        if (navigationType == UIWebViewNavigationTypeLinkClicked)

        {

            NSURL *url = [request URL];

            if([[UIApplication sharedApplication]canOpenURL:url])

            {

                [[UIApplication sharedApplication]openURL:url];

            }

            return NO;

        }

        return YES;

    }

    拼接的Html最后加的按钮的方法如下:

    NSURL * path = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"source_page_button" ofType:@"png"]];

        [strReturn appendString:[NSString stringWithFormat:@"<div style='display:block;text-align:center;margin:0 auto;'><a href='%@'><img src='%@'></a></div>",_url,path]];

    这样写了之后,点击按钮之后就不会用当前的UIWebView来加载网络上的网页,而是调用系统的Safari来打开。

    注意:最后一点要返回YES,否则UIWebView刚开始将一片空白,这是因为第一次加载的时候也是UIWebView请求一个链接,如果返回NO,就不会去加载了。还可以对url的内容进行判断,看是什么请求。

    接口,如果为webView添加了delegate对象并实现该接口,那么在webView加载任何一个frame之前都会delegate对象的该方法,该方法的返回值用以控制是否允许加载目标链接页面的内容,返回YES将直接加载内容,NO则反之。并且UIWebViewNavigationType枚举,定义了页面中用户行为的分类,包括

    • UIWebViewNavigationTypeLinkClicked,用户触击了一个链接。
    • UIWebViewNavigationTypeFormSubmitted,用户提交了一个表单。
    • UIWebViewNavigationTypeBackForward,用户触击前进或返回按钮。
    • UIWebViewNavigationTypeReload,用户触击重新加载的按钮。
    • UIWebViewNavigationTypeFormResubmitted,用户重复提交表单
    • UIWebViewNavigationTypeOther,发生其它行为。
  • 相关阅读:
    keyset与entryset
    solr4.9r+ Eclipse 4.3+ tomcat 7.5 +winds7(二)
    如何解决This system is not registered with RHN.
    堆和栈的差别(转过无数次的文章)
    墨菲定律、二八法则、马太效应、手表定理、“不值得”定律、彼得原理、零和游戏、华盛顿合作规律、酒与污水定律、水桶定律、蘑菇管理原理、钱的问题、奥卡姆剃刀等13条是左右人生的金科玉律
    atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
    漫谈并发编程(二):java线程的创建与基本控制
    exosip
    PostgreSQL服务端监听设置及client连接方法
    APK反编译。
  • 原文地址:https://www.cnblogs.com/gaohe/p/4537823.html
Copyright © 2020-2023  润新知