UIWebView

UIWebView是iOS sdk中一个最常用的控件。是内置的浏览器控件,我们可以用它来浏览网页、打开文档等等。这篇文章我将使用这个控件,做一个简易的浏览器。如下图:

我们创建一个Window-based Application程序命名为:UIWebViewDemo

UIWebView的loadRequest可以用来加载一个url地址,它需要一个NSURLRequest参数。我们定义一个方法用来加载url。在UIWebViewDemoViewController中定义下面方法:

复制代码
- (void)loadWebPageWithString:(NSString*)urlString
{
NSURL
*url =[NSURL URLWithString:urlString];
NSLog(urlString);
NSURLRequest
*request =[NSURLRequest requestWithURL:url];
[webView loadRequest:request];
}
复制代码

在界面上放置3个控件,一个textfield、一个button、一个uiwebview,布局如下:

在代码中定义相关的控件:webView用于展示网页、textField用于地址栏、activityIndicatorView用于加载的动画、buttonPress用于按钮的点击事件。

@interface UIWebViewDemoViewController :UIViewController {    
    IBOutlet UIWebView *webView;
    IBOutlet UITextField *textField;
    UIActivityIndicatorView *activityIndicatorView;
    
}
- (IBAction)buttonPress:(id) sender;
- (void)loadWebPageWithString:(NSString*)urlString;
@end

使用IB关联他们。

设置UIWebView,初始化UIActivityIndicatorView

复制代码
- (void)viewDidLoad
{
[super viewDidLoad];
webView.scalesPageToFit
=YES;
webView.
delegate =self;
activityIndicatorView
= [[UIActivityIndicatorView alloc]
initWithFrame : CGRectMake(
0.0f, 0.0f, 32.0f, 32.0f)] ;
[activityIndicatorView setCenter: self.view.center] ;
[activityIndicatorView setActivityIndicatorViewStyle: UIActivityIndicatorViewStyleWhite] ;
[self.view addSubview : activityIndicatorView] ;
[self buttonPress:nil];
// Do any additional setup after loading the view from its nib.
}
复制代码

UIWebView主要有下面几个委托方法:

1、- (void)webViewDidStartLoad:(UIWebView *)webView;开始加载的时候执行该方法。
2、- (void)webViewDidFinishLoad:(UIWebView *)webView;加载完成的时候执行该方法。
3、- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;加载出错的时候执行该方法。

我们可以将activityIndicatorView放置到前面两个委托方法中。

复制代码
- (void)webViewDidStartLoad:(UIWebView *)webView
{
[activityIndicatorView startAnimating] ;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[activityIndicatorView stopAnimating];
}
复制代码

buttonPress方法很简单,调用我们开始定义好的loadWebPageWithString方法就行了:

- (IBAction)buttonPress:(id) sender
{
    [textField resignFirstResponder]; 
    [self loadWebPageWithString:textField.text];
    
}

当请求页面出现错误的时候,我们给予提示:

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    UIAlertView *alterview = [[UIAlertView alloc] initWithTitle:@"" message:[error localizedDescription]  delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [alterview show];
    [alterview release];
}

总结:本文通过实现一个简单的浏览器,说明了uiwebview的方法和属性,相信通过这个例子,应该明白uiwebview的使用了。


 

设置UIWebView透明

 

  1. [webview setBackgroundColor:[UIColor clearColor]];  
  2.   
  3. webview.opaque NO;  


 

禁止UIWebView滚动 

 

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

 



获取UIWebView高度

 

  1. (void)webViewDidFinishLoad:(UIWebView *)webView1  
  2.  
  3.     UIScrollView *scrollView (UIScrollView *)[[webView subviews] objectAtIndex:0];  
  4.     CGFloat webViewHeight [scrollView contentSize].height;  
  5.     NSString *curHeight [webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"];  
  6.   
  7.     CGRect newFrame webView.frame;  
  8.     newFrame.size.height webViewHeight;  
  9.     webView.frame newFrame;   
  10.  

 



使用JS给UIWebView添加事件响应

1.首先定义事件的JavaScript

 

  1. // timeStamp 微秒  
  2. static NSString const webTouchJavaScriptString  
  3.     @">document.ontouchstart=function(event){\  
  4.     x=event.targetTouches[0].clientX;\  
  5.     y=event.targetTouches[0].clientY;\  
  6.     time=event.timeStamp;\  
  7.     document.location=\"wiweb:touch:start:"+x+":"+y+":"+time;};\  
  8.     document.ontouchmove=function(event){\  
  9.     x=event.targetTouches[0].clientX;\  
  10.     y=event.targetTouches[0].clientY;\  
  11.     document.location=\"wiweb:touch:move:"+x+":"+y;};\  
  12.     document.ontouchcancel=function(event){\  
  13.     document.location=\"wiweb:touch:cancel";};\  
  14.     document.ontouchend=function(event){\  
  15.     time=event.timeStamp;\  
  16.     document.location=\"wiweb:touch:end:"+time;}; " 

2.组织字符串

 

 

  1. NSString *webviewText @"" 
  2. NSString *htmlString [webviewText stringByAppendingFormat:@"%@"@"自定SDFSDFSDFSDF义字体fsdgjdlagj asdkgjksdh卡号给卡仕达;逛了会街啊啊流口水 http://www.baidu.com 的感觉卡拉;四大金刚;拉开始打工绿卡;但是结果来看;就爱上的看过就卡的;上来讲赶快来;啊都是经过后ihgoiadsg;肯定是噶上的好;拉克丝的价格爱国阿斯顿改了可"];  
  3.   
  4. NSString *newHTMLString=[htmlString stringByAppendingString:webTouchJavaScriptString];  

3.事件响应

 

 

  1. (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType  
  2.  
  3.     BOOL result YES;  
  4.     NSURL *requestURL =[[request URL] retain];  
  5.     NSString *requestString [[request URL] absoluteString];  
  6.     static BOOL bstart NO;  
  7.     static BOOL bmove NO;  
  8.     static double lasttime 0;  
  9.       
  10.     NSString *str [requestURL scheme];  
  11.     if ([str isEqualToString:@"http"|| [str isEqualToString:@"https"|| [str isEqualToString:@"mailto"|| [str isEqualToString:@"tel"])  
  12.         && (navigationType == UIWebViewNavigationTypeLinkClicked)  
  13.      
  14.         result ![[UIApplication sharedApplication] openURL:[requestURL autorelease]];  
  15.      
  16.     else  
  17.      
  18.         [requestURL release];  
  19.         NSArray *components [requestString componentsSeparatedByString:@":"];  
  20.         if ([components count]   
  21.             && [(NSString *)[components objectAtIndex:0] isEqualToString:@"wiweb" 
  22.             && [(NSString *)[components objectAtIndex:1] isEqualToString:@"touch"])  
  23.          
  24.             NSString *eventString=[components objectAtIndex:2];  
  25.             if ([eventString isEqualToString:@"start"])  
  26.              
  27.                 float pointX=[[components objectAtIndex:3] floatValue];  
  28.                 float pointY=[[components objectAtIndex:4] floatValue];  
  29.                 double time=[[components objectAtIndex:5] doubleValue];  
  30.                 CGPoint aPoint CGPointMake(pointX, pointY);  
  31.                 NSLog(@"start: %@"NSStringFromCGPoint(aPoint));  
  32.                 NSLog(@"start time:    interval: "time/1000, (time lasttime)/1000);  
  33.                 lasttime time;  
  34.                 bstart YES;  
  35.                 bmove NO;  
  36.                 NSLog(@"bstart: %d -- bmove: %d"bstart, bmove);  
  37.              
  38.             else if ([eventString isEqualToString:@"move"])  
  39.              
  40.                 float pointX=[[components objectAtIndex:3] floatValue];  
  41.                 float pointY=[[components objectAtIndex:4] floatValue];  
  42.                 CGPoint aPoint=CGPointMake(pointX, pointY);  
  43.                 NSLog(@"move: %@"NSStringFromCGPoint(aPoint));  
  44.                 bmove YES;  
  45.                 NSLog(@"bstart: %d -- bmove: %d"bstart, bmove);  
  46.              
  47.             else if ([eventString isEqualToString:@"cancel"])  
  48.              
  49.                 NSLog(@"cancel");  
  50.                 bstart NO;  
  51.                 bmove NO;  
  52.                 NSLog(@"bstart: %d -- bmove: %d"bstart, bmove);  
  53.              
  54.             else if ([eventString isEqualToString:@"end"])  
  55.              
  56.                 double time=[[components objectAtIndex:3] doubleValue];  
  57.                 NSLog(@"end");  
  58.                 NSLog(@"bstart: %d -- bmove: %d"bstart, bmove);  
  59.                 NSLog(@"end time:    interval: "time/1000, (time lasttime)/1000);  
  60.                 if (bstart && !bmove)  
  61.                  
  62.                     if (time lasttime 400)  
  63.                      
  64.                         NSLog(@"LongPress!!!!!!");  
  65.                      
  66.                     else  
  67.                      
  68.                         NSLog(@"Click!!!!!!");  
  69.                      
  70.                  
  71.                 bstart NO;  
  72.                 bmove NO;  
  73.              
  74.               
  75.             return NO;  
  76.          
  77.      
  78.       
  79.     NSURL *url [request URL];  
  80.     NSString *curUrl= [url absoluteString];  
  81.     NSLog(@"cururl: %@"curUrl);  
  82.       
  83.     return result;  
  84.  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值