UIWebView控件的简易浏览器小案例

简介:

        在看了http://www.cnblogs.com/zhuqil/archive/2011/07/28/2119923.html一文博客后,根据参考做了一个差不多一样的小Demo,算是笔记记录


运行结果截图

    



1.创建一个新工程叫UIWebViewDemo; File->New->Project ->single View Application -> next



2.界面布局

拖动三个控件,Web View Text Field 和 Button把TextField和button放到Web View上面,也可以打开


   

调整三个控件所处位置

4.声明输出口

右键某个控件,然后拖动到WebViewViewController.h文件的@interface和@end之间

然后弹出一个框框,我们输入控件名字;

webView






textField





Button





再给button添加一个方法




然后我们声明一个UIActivityIndicatorView对象和一个 loadWebPageWithString方法,并添加上UIWebViewDelegate协议

#import <UIKit/UIKit.h>  @interface WebViewViewController : UIViewController<UIWebViewDelegate> @property (strong, nonatomic) IBOutlet UIWebView *webView; @property (strong, nonatomic) IBOutlet UITextField *textField; @property (strong, nonatomic) IBOutlet UIButton *button;  @property (strong,nonatomic) UIActivityIndicatorView *activityIndicatorView;  - (IBAction)buttonPressed:(id)sender;  -(void)loadWebPageWithString:(NSString *)urlString; @end

5.在我们声明控件输出口的时候,系统也会自动生成一些代码

@synthesize textField; @synthesize webView; @synthesize button; - (void)viewDidUnload {     [self setTextField:nil];     [self setWebView:nil];     [self setButton:nil];     [super viewDidUnload];      }  - (IBAction)buttonPressed:(id)sender {      } 
还需要在添加@synthesize activityIndicatorView

6.viewDidLoad方法中

- (void)viewDidLoad {     [super viewDidLoad]; //自动缩放页面,以适应屏幕 	webView.scalesPageToFit = YES;     webView.delegate = self;     //    指定进度轮大小     self.activityIndicatorView = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)]; //    设置进度轮的中心也可以[self.activityIndicatorView setCenter:CGPointMake(30, 30)];     [self.activityIndicatorView setCenter:self.view.center]; //  设置activityIndicatorView风格       [self.activityIndicatorView setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];     [self.webView addSubview:self.activityIndicatorView];     [self buttonPressed:nil];       }

7.实现方法代码部分


加载一个URL方法

-(void)loadWebPageWithString:(NSString *)urlString {     if (self.textField.text != nil) { //        追加一个字符串         urlString = [@"http://" stringByAppendingFormat:urlString];         NSURL *url = [NSURL URLWithString:urlString]; //        NSURLRequest类方法用于获取URL         NSURLRequest *request = [NSURLRequest requestWithURL:url]; //        webView加载URL         [webView loadRequest:request];     }       }

按钮事件

//按钮事件,点击按钮开始调用loadWebPageWithString方法 - (IBAction)buttonPressed:(id)sender {     [textField resignFirstResponder];     [self loadWebPageWithString:textField.text]; //    点击完button后隐藏textField和button     if (sender==button) {         textField.hidden = YES;         button.hidden = YES;     } }

UIWebView委托方法
//UIWebView委托方法,开始加载一个url时候调用此方法 -(void)webViewDidStartLoad:(UIWebView *)webView {     [self.activityIndicatorView startAnimating]; }
//UIWebView委托方法,url加载完成的时候调用此方法 -(void)webViewDidFinishLoad:(UIWebView *)webView {     [self.activityIndicatorView stopAnimating]; }
//加载url出错的时候调用此方法 -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { // 判断button是否被触摸     if (!self.button ) {                   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@""                                                         message:[error localizedDescription]                                                        delegate:nil                                               cancelButtonTitle:@"OK"                                               otherButtonTitles: nil];         [alert show];     }      }


8.另外说一下 UIActivityIndicatorView,实例提供轻型视图,这些视图显示一个标准的旋转进度轮,在IB中的控件



iPhone提供了几种不同样式风格的UIActivityIndicatorView。

activityIndicatorView有三种风格

typedef enum {

    UIActivityIndicatorViewStyleWhiteLarge,

    UIActivityIndicatorViewStyleWhite,

    UIActivityIndicatorViewStyleGray,

} UIActivityIndicatorViewStyle;

UIActivityIndicator- ViewStyleWhite和UIActivityIndicatorViewStyleGray是最简洁的。黑色背景下最适合白色版本的外观,白色背景最适合灰色外观。它非常瘦小,而且采用夏普风格。选择白色还是灰色时要格外注意。全白显示在白色背景下将不能显示任何内容。而UIActivityIndicatorViewStyleWhiteLarge只能用于深色背景。它提供最大、最清晰的指示器。

对于activityIndicatorView的实现把他放在了UIWebView的两个委托方法中

当开始加载一个URL时候,开始activityIndicatorView,加载完毕停止activityIndicatorView动画加载效果

 [self.activityIndicatorViewstartAnimating];

 [self.activityIndicatorViewstopAnimating];


9.在 -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error方法中,是检测加载出错时候调用此方法,当运行的时候还没输入URL地址就开始调用这个方法,提示not url信息,所以在这用了一个if判断,按钮是否触发事件,当输入一个URL之后,点击按钮GO才加载URL,然后在调用URL是否是有效的,[error localizedDescription ]是自动检测系统的错误信息;


源代码:http://download.csdn.net/detail/duxinfeng2010/4468804





     本文转自新风作浪 51CTO博客,原文链接:http://blog.51cto.com/duxinfeng/1208727,如需转载请自行联系原作者






相关文章
|
6月前
|
Web App开发 移动开发 JavaScript
【前端用法】HTML5 Video标签如何屏蔽右键视频另存为的js代码以及如何禁用浏览器控件,Video 禁止鼠标右键下载
【前端用法】HTML5 Video标签如何屏蔽右键视频另存为的js代码以及如何禁用浏览器控件,Video 禁止鼠标右键下载
172 0
MFC中使用浏览器控件
MFC中使用浏览器控件
85 0
|
Web App开发 Android开发 数据安全/隐私保护
UIWebView加载的3种方式(建一个类似Safari的浏览器)
UIWebView加载的3种方式(建一个类似Safari的浏览器)
110 0
UIWebView加载的3种方式(建一个类似Safari的浏览器)
|
JavaScript C++
给Webkit内核的浏览器控件增加互交功能
转载请说明出处,谢谢~~       昨天封装了基于webkit的wke浏览器内核,做成了duilib的浏览器控件,实现了浏览功能,但是单单的浏览功能还不满足需求,在我的仿酷狗项目中乐库的功能需要与浏览器互交。
1755 0
|
Web App开发 .NET
asp.net 调用echarts显示图表控件随浏览器自适应解决方案
1、问题来源         我们在asp.net开发中常使用到frameset的框架结构,比如上左中右方式,在中间部分是一个可以控制左侧部分显示隐藏的功能,这时右边内容区域如果有使用echa...
1129 0
|
C++ 数据格式 XML
duilib 的IE浏览器控件去边框和去滚动条的代码
转载请说明原出处,谢谢~~         近些天在duilib群里经常有朋友问起,怎么让duilib的IE控件可以去边框,去滚动条的问题,或者是如何去控件IE控件的行为。
1169 0
|
Web App开发 JavaScript C++
基于wke封装的duilib的webkit浏览器控件,可以c++与js互交,源码及demo下载地址
转载请说明原出处,谢谢~~        前些日子用wke内核封装了duilib的webkit浏览器控件,好多群里朋友私聊我希望可以我公布源码,今天把这个控件的源码和使用demo公布。
2004 0

热门文章

最新文章