首頁(新聞數(shù)據(jù)的處理)
后臺(tái)返回的數(shù)據(jù)只有一個(gè)Html的Body內(nèi)容。至于文本的顯示樣式需要在本地拼處理
這時(shí)候就需要根據(jù)樣式自己在本地拼接一些字符串 使圖片和文字正確的顯示
NSMutableString *html = [NSMutableString string];
[html appendString:@"<html>"];
[html appendString:@"<head>"];
NSURL *url = [[NSBundle mainBundle] URLForResource:@"Detail.css" withExtension:nil];
/** link這里是h5里面的引入css樣式的標(biāo)簽烧颖,引入本地的Details文件*/
[html appendString:@"<link rel=\"stylesheet\" href=\"%@\">",url];
/**拼接頭部完畢*/
[html appendString:@"</head>"];
[html appendString:@"<body>"];
在Body中間添加需要的HTML文本
/**拼接body完畢*/
[html appendString:@"</body>"];
[html appendString:@"</html>"];
給圖片添加點(diǎn)擊事件
給圖片添加點(diǎn)擊事件 大體思路上有兩種 第一種就是攔截連接的方法,第二種就是圖片點(diǎn)擊后挪鹏,調(diào)用原生的方法域帐。這里建議使用第二種,簡單一些碾篡。
1.給圖片的添加點(diǎn)擊事件的思路大體上是:利用JS的方法給圖片添加上點(diǎn)擊事件舰绘,當(dāng)點(diǎn)擊圖片的時(shí)候蹂喻,就修改window.location.href這個(gè)屬性(將圖片鏈接設(shè)置為該屬性)。這個(gè)屬性使用控制著當(dāng)前頁面的跳轉(zhuǎn)使用的捂寿。修改后口四,在webView的代理方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType ?就可以攔截到要跳轉(zhuǎn)的連接,也就拿到你需要的圖片的地址.
給圖片添加點(diǎn)擊事件
NSString *onload = @"this.onclick = function() {\ ? ? ??
window.location.href = 'sx:src=' +this.src;\? ? ? ? };"; ? ? ??
這里這個(gè)imgModel.src是圖片的地址秦陋。
[imgHtml appendFormat:@"<img class=\"imgs\" onload=\"%@\" width=\"95%%\" height=\"auto\" src=\"%@\">",onload,imgModel.src]; ??
然后在webView的代理方法里面這么做 就可以攔截圖片的連接(有點(diǎn)麻煩)
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSString *url = request.URL.absoluteString蔓彩;
NSRange range = [url rangeOfString:@"sx:src="];
if (range.location != NSNotFound) {
NSInteger begin = range.location + range.length;
NSString *src = [url substringFromIndex:begin];
[self savePictureToAlbum:src];
return NO;
}
return YES;
}
2.第二種方法簡單些 可以這么做,直接給圖片添加上點(diǎn)擊事件,將圖片的連接直接傳給原生的方法
NSString *onload = @"this.onclick = function() {\? ? ?
? lbImageClick(this.src);\? ? ?
? };";? ? ? ?
[imgHtml appendFormat:@"",onload,imgModel.src];
這里面的lbImageClick 方法需要原生的實(shí)現(xiàn)就可以了
在webView的這個(gè)代理方法里面實(shí)現(xiàn)
- (void)webViewDidFinishLoad:(UIWebView *)webView {
JSContext *context = [webView? valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
context[@"lbImageClick"] = ^(NSString *src) {
[self savePictureToAlbum:src];
};
}
這種方法相比第一種感覺簡單些。赤嚼。旷赖。。更卒。(這個(gè)需要#import<JavaScriptCore/JavaScriptCore.h>)
給寫好的網(wǎng)頁圖片添加點(diǎn)擊事件 (在webViewDidFinishLoad)
NSString *jsGetImages = @"function getImages(){\
var objs = document.getElementsByTagName(\"img\"); \
for(var i = 0 ; i<objs.length; i++){\
objs[i].onclick = function(){\
//這里就可以給每張圖片添加上點(diǎn)擊方法了等孵。。蹂空。俯萌。
}\
}\
return objs.length;\
}";
[webView stringByEvaluatingJavaScriptFromString:jsGetImages];
/**調(diào)用該JS方法*/
NSString *length = [webView stringByEvaluatingJavaScriptFromString:@"getImages()"];
DLog(@"%@",length); 返回圖片的個(gè)數(shù)。
上面gif的效果demo里面都做了詳細(xì)的介紹上枕,感覺沒什么說的了(文章格式寫的挺丑)咐熙。
demo地址 :https://github.com/tianliangyihou/GFDayDayNews
如果直接點(diǎn)擊網(wǎng)址打不開的話,可以直接復(fù)制網(wǎng)址辨萍,在瀏覽器上訪問棋恼,或者在github上搜索GFDayDayNews