标签:
①像普通controller那样实现跳转到webview的效果,而不是直接加到当前controller
②隐藏webview的某些元素
③webview跳往原生app
④给webview添加进度条
解决方法如下:
①使用webview的基本步骤
NSURL *url = [NSURL URLWithString:self.urlStr]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [self.webView loadRequest:request]; -(UIWebView *)webView{ if (!_webView) { _webView = [[UIWebView alloc]initWithFrame:[UIScreen mainScreen].bounds]; _webView.delegate = self; [self.view addSubview:_webView]; } return _webView; }
但这样webview是直接加在当前controller的,要实现跳转效果,应当写个controller,里边再添加webview
跳转是这样的
MyWebViewController *web = [[MyWebViewController alloc]initWithUrl:urlGo];
[self.navigationController pushViewController:web animated:YES];
MyWebViewController是这样定义的
.h文件
@interface MyWebViewController : UIViewController<UIWebViewDelegate> @property(nonatomic,copy) NSString *urlStr; @end
.m内
@interface MyWebViewController () @property(nonatomic,strong) UIWebView *webView; @end @implementation MyWebViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor colorWithHexString:@"#f2f2f2"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [self.webView loadRequest:request]; } -(UIWebView *)webView{ if (!_webView) { _webView = [[UIWebView alloc]initWithFrame:[UIScreen mainScreen].bounds]; _webView.delegate = self; [self.view addSubview:_webView]; } return _webView; } @end
这样就能实现webview的跳转和基本使用
②隐藏webview的元素
这需要在webview的代理方法中实现,并且用js来操作。先在chrome上用开发者工具,获取要隐藏的元素的class,然后用
document.documentElement.getElementsByClassName(‘元素的class‘)[0].style.display = ‘none‘
//网页加载完成 -(void)webViewDidFinishLoad:(UIWebView *)webView{ //去除某个按钮 [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.getElementsByClassName(‘ibar-toggle‘)[0].style.display = ‘none‘"]; //将controller标题改为webview标题 NSString *title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"]; if (title.length) { self.title = title; } }
③webview跳往原生app
这同样需要在webview的代理方法中实现
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
在需要跳往webview的地方返回YES,跳往原生app的地方返回NO,再添加跳原生app的方法。这需要拦截url内的字符串判断比较。如跳往商品详情页
http://xxx.com/wap/getItemDetail/146762587051761769.htm
//网页加载之前执行该方法 -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ NSString *resuestStr = request.URL.absoluteString; if ([resuestStr rangeOfString:@"getItemDetail"].location != NSNotFound) { NSArray *tempArr1 = [resuestStr componentsSeparatedByString:@"getItemDetail/"]; NSString *tempStr1 = [tempArr1 lastObject]; NSString *itemCode = [tempStr1 stringByReplacingOccurrencesOfString:@".htm" withString:@""]; ProductDetailViewController *vc = [[ProductDetailViewController alloc]initWithItemCode:itemCode]; [self.navigationController pushViewController:vc animated:YES]; return NO; } return YES; }
④给webview添加进度条
这需要用到第三方库NJKWebViewProgress,github地址为https://github.com/ninjinkun/NJKWebViewProgress
上边写的已经很清楚
要改变进度条的颜色,需要在NJKWebViewProgressView.m里configureViews方法修改
UIColor *tintColor = [UIColor colorWithRed:0/255.0 green:224/255.0 blue:94/255.0 alpha:1];
标签:
原文地址:http://www.cnblogs.com/Apologize/p/5662890.html