本文共 2282 字,大约阅读时间需要 7 分钟。
Maybe you can find some experience, you didn’t pay attention to when you use UIWebView
- 1.UIWebView methods and property
- 2.UIWebViewDelegate methods
- 3.Use notes
UIWebView methods
- (void)loadData:(NSData )data MIMEType:(NSString )MIMEType textEncodingName:(NSString )encodingName baseURL:(NSURL )baseURL(用的比较少)
- (void)loadHTMLString:(NSString )string baseURL:(NSURL )baseURL(根据给出的一段html字符串数据, 通过数据来源的url展示webView界面)
- (void)loadRequest:(NSURLRequest *)request (直接使用url展示webView)
- @property(nonatomic, readonly, strong) NSURLRequest *request(比较有用的属性)
NSString *str = request.URL.absoluteString /** 可以直接拿出request中的URL, 有时候可能会用到 */
UIWebViewDelegate methods
- (BOOL)webView:(UIWebView )webView shouldStartLoadWithRequest:(NSURLRequest )request navigationType:(UIWebViewNavigationType)navigationType(最主要的代理方法, 用于截取webView每次跳转, 可以根据两个参数判, 断是否跳转到正常的web页面还是跳转到自己写的原生页面)
- @param request : The content location(请求)
- @param navigationType : The type of user acti, on that started the load request(跳转类型详细看下面)
- UIWebViewNavigationTypeLinkClicked, 用户触击了一个链接。
- UIWebViewNavigationTypeFormSubmitted, 用户提交了一个表单。
- UIWebViewNavigationTypeBackForward, 用户触击前进或返回按钮。
- UIWebViewNavigationTypeReload, 用户触击重新加载的按钮。
- UIWebViewNavigationTypeFormResubmitted, 用户重复提交表单
- UIWebViewNavigationTypeOther, 发生其它行为。
Use notes
- 这是使用webView遇到的一种情况, web页面里有直接唤起电话通话和QQ通话的语句, 但是我们在iOS中使用webView无法直接拿过来套用, 所以就有了以下的代码。
- 具体思路是通过代理方法截取每次webView的request, 通过判断request的URL来操作, 当遇到用户使用web的QQ或者直接拨打电话时, 断开webView的请求, 走自己写的iOS方法代码如下:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {/* QQURL PHONEWEBURL..是宏定义, 实际以自己代码为准 */ NSString *tempStr = [request URL].absoluteString; /** 获取抓到的请求URL用于判断 */ if ([tempStr isEqualToString:QQURL]) { /** 如果来的请求是QQ则走这里 */ /* iOS直接唤醒手机端QQ并发起会话 */ UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero]; NSURL *url = [NSURL URLWithString:PHONEIOSURL]; NSURLRequest *requestQQ = [NSURLRequest requestWithURL:url]; webView.delegate = self; [webView loadRequest:requestQQ]; [self.view addSubview:webView]; return NO; } else if ([tempStr isEqualToString:PHONEWEBURL]) { /** 如果来的请求是拨打电话则走这里 */ [self callPhone]; return NO; } return YES;}
转载地址:http://nlvsn.baihongyu.com/