http://blog.youkuaiyun.com/cao491673669/article/details/18704177
上一章说了如何把想展示的内容并凑为html字符串然后在UIWebView中展示,今章就说一下展示之后如何实现点击按钮,下载并展示图片,下载语音等等。
在处理文字内容的时候,需要用到正则表达式把字符串中存在的图片地址解析出来的地址列表,在正文加载完成后就开始批量下载了。
由于我项目中使用ASIHTTPRequest下载的,下载前先检查缓存等基本操作也不详细说了,代码如下:
imgDownloadNetworkQueue_ = [[ASINetworkQueue alloc] init];
[imgDownloadNetworkQueue_ setMaxConcurrentOperationCount:1];//设置线程池中线程数
[imgDownloadNetworkQueue_ setShouldCancelAllRequestsOnFailure:NO];
NSURL* url = [NSURL URLWithString:[imgUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
ASIHTTPRequest* request = [ASIHTTPRequest requestWithURL:url];
[Request addHeaderForImageRequest:request];//这里添加图片防盗链引用等请求头
[request setDidFinishSelector:@selector(requestImageFinished:)];//图片加载完成时的委托
[request setDidFailSelector:@selector(requestImageFailed:)];
[request setDelegate:self];
[imgDownloadNetworkQueue_ addOperation:request];
正文加载完成后,执行
[imgDownloadNetworkQueue_ go];
就开始下载了。然后语音下载等也同理。
接着就是点击跳转的实现了。在UIWebView中添加一个点击元素事件
UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
singleTap.numberOfTapsRequired = 1;
singleTap.delegate = self;
[webView_ addGestureRecognizer:singleTap];
[singleTap release];
然后更改楼主楼层中username字段,在上面添加<a></a>标签,代码如下:
<p><a onclick="user_info" username="$username$" userid="$userid$">username</a></p>
然后判断点击的方法寻找点击了哪个标签,寻找的方法用javascript实现,代码如下:
CGPoint pt=[sender locationInView:webView_];
NSString* js = [NSString stringWithFormat:@"elementFromViewportPoint(%f, %f).getAttribute('onclick')", pt.x, pt.y];
NSString* onclick = [webView_ stringByEvaluatingJavaScriptFromString:js];
这样就知道用户点击了哪一个标签了。还有一种点击到文字中带href属性的标签,这个让UIWebView自己处理,当点击带href的时候会执行委托方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
这里当网页视图被指示载入内容而得到通知,返回YES就会进行加载。当然要处理自身点击事件就要返回false,也能能根据request判断用户点击的元素进行处理。
图片、语音批量下载和点击事件总结得差不多了,下一章讨论一下如何自定义浏览器外形、css样式以及左右划动手势等。