UIWebView
UIWebView就是一个可以帮我们打开网站的浏览器界面,我们对这个页面操作就相当于浏览器操作
UIWebView使用的三种情况
- 整个几面的排版比较复杂,需要很多判断
- 整个界面整体布局改变非常大
- 需要访问某个网站的时候
UIwebView的加载方式
- 利用requset加载
// 初始化一个NSURLRequset对象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://pianke.me/webview/539e50698ead0ef96e0000a3"]];
// 初始化一个webView
_webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
// 利用request加载
[_webView loadRequest:request];
[self.view addSubview:_webView];
- 利用一个HTMLString加载
// 把网址转化成一个NSData
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://pianke.me/webview/539e50698ead0ef96e0000a3"]];
// 把网站内容的二进制转化成为一个字符串
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// html语句中有head标签 可以通过这段代码来改变图片宽度
string = [NSString stringWithFormat:@"<head><style>img{width:300px !important;}</style></head>%@",string];
// 替换html语句中的字段
string = [string stringByReplacingOccurrencesOfString:@"黑啤" withString:@"Agent Mahong"];
// UIWebView第二种加载方式
[_webView loadHTMLString:string baseURL:nil];
// 设置代理
_webView.delegate = self;
[self.view addSubview:_webView];
UIWebView常用代理方法实现
这个代理方法控制了我们的UIWebView是否能够加载,返回YES代表可以加载,返回NO代表不能架子啊 (UIWebView每次加载一个新的界面的时候都会执行这个方法)
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
// 从NSURLRequset获取url
NSURL *url = request.URL;
// 从NSURL里面获取字符串
NSString *str = url.absoluteString;
// NSLog(@"%@",str);
// 根据字符串来判断是否加载这个请求
if ([str isEqualToString:kFirstAPI]) {
return YES;
}
// 通过字符串参数获取到一个SEL类型的对象(SEL表示一个方法)
SEL sss = NSSelectorFromString(@"viewDidLoad");
// 让self去执行这个方法
[self performSelector:sss withObject:nil afterDelay:0];
return NO;
}
webView每次加载完毕之后就会执行这个代理方法
- (void)webViewDidFinishLoad:(UIWebView *)webView{
// 使用WebView去执行一段JS脚本的代码,通过代码我们可以返回一个字符串
// 获取webView高度
CGFloat height = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"] floatValue];
NSLog(@"%f",height);
webView.frame = CGRectMake(0, 0, 375, height);
[webView sizeToFit];
CGRect frame = webView.frame;
NSLog(@"%f",frame.size.height);
}
在webView加载出来的界面添加控件
- (void)webViewDidFinishLoad:(UIWebView *)webView{
// 获取webView高度
_webViewHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
webView.scrollView.contentSize = CGSizeMake(kScreenWidth, _webViewHeight + 40);
// 在webView.scrollView上添加控件
.......
}