当前位置: 代码迷 >> Web前端 >> UIWebView的应用总结
  详细解决方案

UIWebView的应用总结

热度:29   发布时间:2012-09-18 16:21:42.0
UIWebView的使用总结

设置UIWebView透明

[webview setBackgroundColor:[UIColor clearColor]];

webview.opaque = NO;


禁止UIWebView滚动 

webView.scrollView.bounces = NO; //__IPHONE_5_0
UIScrollView *scrollView = (UIScrollView *)[[webView subviews] objectAtIndex:0];
scrollView.bounces = NO; 



获取UIWebView高度

- (void)webViewDidFinishLoad:(UIWebView *)webView1
{
    UIScrollView *scrollView = (UIScrollView *)[[webView subviews] objectAtIndex:0];
    CGFloat webViewHeight = [scrollView contentSize].height;
    NSString *curHeight = [webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"];

    CGRect newFrame = webView.frame;
    newFrame.size.height = webViewHeight;
    webView.frame = newFrame; 
}



使用JS给UIWebView添加事件响应

1.首先定义事件的JavaScript

// timeStamp 微秒
static NSString * const webTouchJavaScriptString =
    @"<script language=\"javascript\">document.ontouchstart=function(event){\
    x=event.targetTouches[0].clientX;\
    y=event.targetTouches[0].clientY;\
    time=event.timeStamp;\
    document.location=\"wiweb:touch:start:\"+x+\":\"+y+\":\"+time;};\
    document.ontouchmove=function(event){\
    x=event.targetTouches[0].clientX;\
    y=event.targetTouches[0].clientY;\
    document.location=\"wiweb:touch:move:\"+x+\":\"+y;};\
    document.ontouchcancel=function(event){\
    document.location=\"wiweb:touch:cancel\";};\
    document.ontouchend=function(event){\
    time=event.timeStamp;\
    document.location=\"wiweb:touch:end:\"+time;}; </script>";


2.组织字符串

    NSString *webviewText = @"<style>body{margin:0;background-color:transparent;color:#000000;word-wrap:break-word;word-break:break-all;font:18px/22px system}</style>";
    NSString *htmlString = [webviewText stringByAppendingFormat:@"%@", @"自定SDFSDFSDFSDF义字体fsdgjdlagj asdkgjksdh卡号给卡仕达;逛了会街啊啊流口水 http://www.baidu.com 的感觉卡拉;四大金刚;拉开始打工绿卡;但是结果来看;就爱上的看过就卡的;上来讲赶快来;啊都是经过后ihgoiadsg;肯定是噶上的好;拉克丝的价格爱国阿斯顿改了可"];
    
    NSString *newHTMLString=[htmlString stringByAppendingString:webTouchJavaScriptString];

3.事件响应

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    BOOL result = YES;
    NSURL *requestURL =[[request URL] retain];
    NSString *requestString = [[request URL] absoluteString];
    static BOOL bstart = NO;
    static BOOL bmove = NO;
    static double lasttime = 0;
    
    NSString *str = [requestURL scheme];
    if ( ([str isEqualToString:@"http"] || [str isEqualToString:@"https"] || [str isEqualToString:@"mailto"] || [str isEqualToString:@"tel"])
        && (navigationType == UIWebViewNavigationTypeLinkClicked) )
    {
        result = ![[UIApplication sharedApplication] openURL:[requestURL autorelease]];
    }
    else
    {
        [requestURL release];
        NSArray *components = [requestString componentsSeparatedByString:@":"];
        if ([components count] > 2 
            && [(NSString *)[components objectAtIndex:0] isEqualToString:@"wiweb"]
            && [(NSString *)[components objectAtIndex:1] isEqualToString:@"touch"])
        {
            NSString *eventString=[components objectAtIndex:2];
            if ([eventString isEqualToString:@"start"])
            {
                float pointX=[[components objectAtIndex:3] floatValue];
                float pointY=[[components objectAtIndex:4] floatValue];
                double time=[[components objectAtIndex:5] doubleValue];
                CGPoint aPoint = CGPointMake(pointX, pointY);
                NSLog(@"start: %@", NSStringFromCGPoint(aPoint));
                NSLog(@"start time: %0f   interval: %0f", time/1000, (time - lasttime)/1000);
                lasttime = time;
                bstart = YES;
                bmove = NO;
                NSLog(@"bstart: %d -- bmove: %d", bstart, bmove);
            }
            else if ([eventString isEqualToString:@"move"])
            {
                float pointX=[[components objectAtIndex:3] floatValue];
                float pointY=[[components objectAtIndex:4] floatValue];
                CGPoint aPoint=CGPointMake(pointX, pointY);
                NSLog(@"move: %@", NSStringFromCGPoint(aPoint));
                bmove = YES;
                NSLog(@"bstart: %d -- bmove: %d", bstart, bmove);
            }
            else if ([eventString isEqualToString:@"cancel"])
            {
                NSLog(@"cancel");
                bstart = NO;
                bmove = NO;
                NSLog(@"bstart: %d -- bmove: %d", bstart, bmove);
            }
            else if ([eventString isEqualToString:@"end"])
            {
                double time=[[components objectAtIndex:3] doubleValue];
                NSLog(@"end");
                NSLog(@"bstart: %d -- bmove: %d", bstart, bmove);
                NSLog(@"end time: %0f   interval: %0f", time/1000, (time - lasttime)/1000);
                if (bstart && !bmove)
                {
                    if (time - lasttime > 400)
                    {
                        NSLog(@"LongPress!!!!!!");
                    }
                    else
                    {
                        NSLog(@"Click!!!!!!");
                    }
                }
                bstart = NO;
                bmove = NO;
            }
            
            return NO;
        }
    }
    
    NSURL *url = [request URL];
    NSString *curUrl= [url absoluteString];
    NSLog(@"cururl: %@", curUrl);
    
    return result;
}


有时间再写个和微博类似的超文本显示的例子