在iOS应用中使用UIWebView创建简单的网页浏览器界面_IOS开发教程-查字典教程网
在iOS应用中使用UIWebView创建简单的网页浏览器界面
在iOS应用中使用UIWebView创建简单的网页浏览器界面
发布时间:2016-12-28 来源:查字典编辑
摘要:UIWebView是iOSsdk中一个最常用的控件。是内置的浏览器控件,我们可以用它来浏览网页、打开文档等等。这篇文章我将使用这个控件,做一...

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<UIWebViewDelegate> {

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高度

监听 webView的 contentSize,每当contentSize的值改变时就去更改webView 的frame。

复制代码 代码如下:

[activityWebView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];

然后在回调方法里改变webView的frame

复制代码 代码如下:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

if ([keyPath isEqualToString:@"contentSize"]) {

webViewHeight = [[activityWebView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];

CGRect newFrame = activityWebView.frame;

newFrame.size.height = webViewHeight;

activityWebView.frame = newFrame;

[mainTableView setTableHeaderView:activityWebView];

}

}

在页面消失时记得 remove 监听对象,否则会闪退

复制代码 代码如下:

-(void)viewWillDisappear:(BOOL)antimated{

[super viewWillDisappear:antimated];

[activityWebView.scrollView removeObserver:self

forKeyPath:@"contentSize" context:nil];

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新IOS开发学习
    热门IOS开发学习
    编程开发子分类