iOS获取UIWebView上面的点击事件
问题背景
在网上看到很多文章都说iOS的UIWebView
比较耗内存,在我的项目中,最开始我也是用UIWebView
来加载网页的。刚开始加载的是自己拼接成的HTML
,后来在HTML
中加入一个按钮,点击之后用当前的UIWebView
去加载网络上的网页。程序跑起来发现非常耗内存,加载几个网上的网页之后就爆内存警告了,不处理的话很容易被评估拒掉app。
后来就改成用系统的safari
浏览器来打开网络上的网页,把着耗内存的工作交给苹果自己自带的浏览器来处理,就避免了我这个app crash
。但是怎么获取网页上这个按钮点击的事件呢,这个按钮本身就绑定了一个url
,怎么让它点击之后当前的UIWebView
不去load
这个url
呢。
解决方案
后来查了一下资料,发现UIWebView
的协议里面有这么个方法,可以获取它加载的网页上面的事件,比如单击了图片,单击了按钮等等。
|
|
这样写了之后,点击按钮之后就不会用当前的UIWebView
来加载网络上的网页,而是调用系统的Safari
来打开。
注意
最后一点要返回YES
,否则UIWebView
刚开始将一片空白,这是因为第一次加载的时候也是UIWebView
请求一个链接,如果返回NO
,就不会去加载了。还可以对url
的内容进行判断,看是什么请求。
如果为webView
添加了delegate
对象并实现该接口,那么在webView
加载任何一个frame
之前都会delegate
对象的该方法,该方法的返回值用以控制是否允许加载目标链接页面的内容,返回YES
将直接加载内容,NO
则反之。并且UIWebViewNavigationType
枚举,定义了页面中用户行为的分类,包括
- UIWebViewNavigationTypeLinkClicked, //用户触击了一个链接。
- UIWebViewNavigationTypeFormSubmitted, //用户提交了一个表单。
- UIWebViewNavigationTypeBackForward, //用户触击前进或返回按钮。
- UIWebViewNavigationTypeReload, //用户触击重新加载的按钮。
- UIWebViewNavigationTypeFormResubmitted, //用户重复提交表单
- UIWebViewNavigationTypeOther, //发生其它行为。