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,如需转载请自行联系原作者






相关文章
|
4月前
高亮提示、聚焦控件并滚动到浏览器中刚刚好可以查看到该控件的位置
高亮提示、聚焦控件并滚动到浏览器中刚刚好可以查看到该控件的位置
|
11月前
|
Web App开发 移动开发 JavaScript
【前端用法】HTML5 Video标签如何屏蔽右键视频另存为的js代码以及如何禁用浏览器控件,Video 禁止鼠标右键下载
【前端用法】HTML5 Video标签如何屏蔽右键视频另存为的js代码以及如何禁用浏览器控件,Video 禁止鼠标右键下载
305 0
|
26天前
|
Apache 数据安全/隐私保护
HAProxy的高级配置选项-ACL篇之基于浏览器匹配制案例
这篇文章介绍了HAProxy的ACL(访问控制列表)功能,特别是如何基于用户代理(User-Agent)即浏览器类型进行匹配和流量分发的高级配置选项,并通过实战案例展示了如何配置ACL规则以实现基于不同浏览器的访问控制。
42 5
HAProxy的高级配置选项-ACL篇之基于浏览器匹配制案例
|
3月前
|
JavaScript 前端开发
WebView2 控件(基于 Microsoft Edge (Chromium) 的嵌入式浏览器控件),获取网页加载后的标题
在使用 WebView2 控件(基于 Microsoft Edge (Chromium) 的嵌入式浏览器控件)时,要获取网页加载后的标题,可以监听 WebView2 的 NavigationCompleted 事件。这个事件被触发时,表示导航已完成,此时执行JavaScript代码可以安全地获取网页的标题。
WebView2 控件(基于 Microsoft Edge (Chromium) 的嵌入式浏览器控件),获取网页加载后的标题
|
2月前
|
JavaScript 前端开发 API
JS案例:在浏览器实现自定义菜单
JS案例:在浏览器实现自定义菜单
26 0
|
11月前
|
JavaScript 前端开发
TypeScript 可以编译成纯 JavaScript,并且可以在任何浏览器上运行,具体应用案例解析
TypeScript 可以编译成纯 JavaScript,并且可以在任何浏览器上运行,具体应用案例解析
96 1
|
存储 Web App开发 缓存
软件工程高效学 | 实战案例:编写浏览器开发可行性研究报告
软件工程是计算机领域的一门专业基础课,它对于培养开发者的软件素质、提高开发者的软件开发能力与软件项目管理能力具有重要意义。本篇介绍实战案例——编写浏览器开发可行性研究报告。
328 1
软件工程高效学 | 实战案例:编写浏览器开发可行性研究报告
|
缓存 前端开发
前端学习案例-浏览器缓存问题2
前端学习案例-浏览器缓存问题2
62 0
前端学习案例-浏览器缓存问题2
|
缓存 前端开发
前端学习案例-浏览器缓存问题1
前端学习案例-浏览器缓存问题1
67 0
前端学习案例-浏览器缓存问题1