码迷,mamicode.com
首页 > Web开发 > 详细

UIWebView使用时的问题

时间:2016-07-12 11:49:20      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

①像普通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];

 

UIWebView使用时的问题

标签:

原文地址:http://www.cnblogs.com/Apologize/p/5662890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!