UIWebView是iOS SDK中最常用的控件之一,它是一個(gè)內(nèi)置的瀏覽器控件,可用于瀏覽網(wǎng)頁(yè)、打開(kāi)文檔等,在本文中,武林技術(shù)頻道小編將使用此控件創(chuàng)建一個(gè)簡(jiǎn)單的瀏覽器,一起來(lái)了解一下吧!
如下圖:

我們創(chuàng)建一個(gè)Window-based Application程序命名為:UIWebViewDemo
UIWebView的loadRequest可以用來(lái)加載一個(gè)url地址,它需要一個(gè)NSURLRequest參數(shù)。我們定義一個(gè)方法用來(lái)加載url。在UIWebViewDemoViewController中定義下面方法:
復(fù)制代碼 代碼如下:
- (void)loadWebPageWithString:(NSString*)urlString
{
??? NSURL *url =[NSURL URLWithString:urlString];
??? NSLog(urlString);
??? NSURLRequest *request =[NSURLRequest requestWithURL:url];
??? [webView loadRequest:request];
}
在界面上放置3個(gè)控件,一個(gè)textfield、一個(gè)button、一個(gè)uiwebview,布局如下:
?
?
?

在代碼中定義相關(guān)的控件:webView用于展示網(wǎng)頁(yè)、textField用于地址欄、activityIndicatorView用于加載的動(dòng)畫、buttonPress用于按鈕的點(diǎn)擊事件。
復(fù)制代碼 代碼如下:
@interface UIWebViewDemoViewController :UIViewController {???
??? IBOutlet UIWebView *webView;
??? IBOutlet UITextField *textField;
??? UIActivityIndicatorView *activityIndicatorView;
????
}
- (IBAction)buttonPress:(id) sender;
- (void)loadWebPageWithString:(NSString*)urlString;
@end
使用IB關(guān)聯(lián)他們。
?
設(shè)置UIWebView,初始化UIActivityIndicatorView:
復(fù)制代碼 代碼如下:
- (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主要有下面幾個(gè)委托方法:
?
1、- (void)webViewDidStartLoad:(UIWebView *)webView;開(kāi)始加載的時(shí)候執(zhí)行該方法。
2、- (void)webViewDidFinishLoad:(UIWebView *)webView;加載完成的時(shí)候執(zhí)行該方法。
3、- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;加載出錯(cuò)的時(shí)候執(zhí)行該方法。
我們可以將activityIndicatorView放置到前面兩個(gè)委托方法中。
復(fù)制代碼 代碼如下:
- (void)webViewDidStartLoad:(UIWebView *)webView
{
??? [activityIndicatorView startAnimating] ;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
??? [activityIndicatorView stopAnimating];
}
buttonPress方法很簡(jiǎn)單,調(diào)用我們開(kāi)始定義好的loadWebPageWithString方法就行了:
?
復(fù)制代碼 代碼如下:
?
- (IBAction)buttonPress:(id) sender
{
??? [textField resignFirstResponder];
??? [self loadWebPageWithString:textField.text];
????
}
當(dāng)請(qǐng)求頁(yè)面出現(xiàn)錯(cuò)誤的時(shí)候,我們給予提示:
?
復(fù)制代碼 代碼如下:
?
- (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];
}
動(dòng)態(tài)獲取UIWebView高度
監(jiān)聽(tīng) webView的 contentSize,每當(dāng)contentSize的值改變時(shí)就去更改webView 的frame。
?
復(fù)制代碼 代碼如下:
?
[activityWebView.scrollView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:nil];
然后在回調(diào)方法里改變webView的frame
?
復(fù)制代碼 代碼如下:
?
- (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];
??? }
}
在頁(yè)面消失時(shí)記得 remove 監(jiān)聽(tīng)對(duì)象,否則會(huì)閃退
?
復(fù)制代碼 代碼如下:
?
-(void)viewWillDisappear:(BOOL)antimated{
??? [super viewWillDisappear:antimated];
??? [activityWebView.scrollView removeObserver:self
forKeyPath:@"contentSize" context:nil];
}
通過(guò)武林技術(shù)頻道小編介紹的淺析iOS應(yīng)用之使用UIWebView創(chuàng)建網(wǎng)頁(yè)瀏覽器,相信大家都有了一定的了解,如需了解更多的相關(guān)資訊,請(qǐng)繼續(xù)關(guān)注武林技術(shù)頻道吧!