使用UIWebView可以實現(xiàn)一個Web瀏覽器,可以時間加載靜態(tài)HTML、動態(tài)URL地址拙毫,也可以實現(xiàn)網(wǎng)頁導航,以及調用JavaScript等峭跳。
一袍患、加載一個動態(tài)URL地址的步驟:
// 1. 實例化一個UIWebView
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
// 2. 獲得NSURLRequest對象
NSString *str = @"http://www.baidu.com";
NSURL *url = [NSURL URLWithString:str];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 3. 調用UIWebView的loadRequest方法加載網(wǎng)頁內(nèi)容
[webView loadRequest:request];
二、使用UIWebView加載靜態(tài)的HTML頁面
// 1. 實例化UIWebView
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
// 2. 以字符串的形式保存HTML代碼
NSString *str = @"Hello<b>你好</b>....<a href = http://www.baidu.com>百度一下</a>";
// 3. 使用UIWebView的loadHTMLString:baseURL方法加載頁面
[webView loadHTMLString:str baseURL:nil];
// 4. 將webView添加到控制器的view上
[self.view addSubview:webView];
三滞欠、可以為UIWebView設置代理來監(jiān)控UIWebView的加載過程肆良。下面代碼演示了如何在顯示網(wǎng)頁之前顯示加載進度標識
- 遵守UIWebViewDelegate協(xié)議
@interface TestViewController () <UIWebViewDelegate>
@property (nonatomic,weak) UIWebView *webView;
@property (nonatomic,weak) UIActivityIndicatorView *aiv;
@end
- 實例化UIWebView和UIActivityIndicatorView
// 實例化UIWebView
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
// 實例化UIActivityIndicatorView
UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(50, 100, 100, 100)];
// 設置UIWebView的代理
webView.delegate = self;
// 設置UIActivityIndicatorView的樣式
aiv.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
// 設置UIActivityIndicatorView的中心點位置與UIWebView相同
aiv.center = webView.center;
self.webView = webView;
self.aiv = aiv;
- 實例化NSURLRequest對象,并加載網(wǎng)頁
// 設置要訪問的網(wǎng)絡URL
NSString *str = @"http://www.baidu.com";
// 實例化NSURL
NSURL *url = [NSURL URLWithString:str];
// 實例化NSURLRequest
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 加載網(wǎng)頁
[webView loadRequest:request];
// 添加UIActivityIndicatorView到UIWebView
[webView addSubview:aiv];
[self.view addSubview:webView];
- 實現(xiàn)協(xié)議方法
// 開始加載網(wǎng)頁時會來到該方法
- (void)webViewDidStartLoad:(UIWebView *)webView
{
// 開始執(zhí)行動畫
[self.aiv startAnimating];
self.aiv.hidden = NO;
}
// 網(wǎng)頁已經(jīng)加載完成時會來到該方法
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
// 停止動畫
[self.aiv stopAnimating];
self.aiv.hidden = YES;
}
四夭谤、UIWebView和網(wǎng)頁的JavaScript之間可以相互通信。下面代碼在界面添加一個按鈕和UIWebView颊乘,點擊按鈕調用JavaScript代碼中的方法彈出提示框
- 在界面添加一個按鈕和UIWebView
// 創(chuàng)建UIWebView對象
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
// 創(chuàng)建一個按鈕
UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(120, 80, 60, 40)];
[btn setTitle:@"testBtn" forState:UIControlStateNormal];
[btn setBackgroundColor:[UIColor greenColor]];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(clickBtn) forControlEvents:UIControlEventTouchUpInside];
// 將按鈕和UIWebView添加到控制器的view
[self.view addSubview:webView];
[self.view addSubview:btn];
- 動態(tài)拼接HTML和JavaScript乏悄,并使用UIWebView加載頁面
NSMutableString *mStr = [NSMutableString stringWithCapacity:20];
[mStr appendString:@"<html>"];
[mStr appendString:@"<head>"];
[mStr appendString:@"<script>"];
[mStr appendString:@"function showAlert() {alert('Hello')}"];
[mStr appendString:@"</script>"];
[mStr appendString:@"</head>"];
[mStr appendString:@"<body>"];
[mStr appendString:@"Test JavaScript"];
[mStr appendString:@"<b>"];
[mStr appendString:@"nihao"];
[mStr appendString:@"</b>"];
[mStr appendString:@"</body>"];
[mStr appendString:@"</html>"];
// 加載頁面
[webView loadHTMLString:mStr baseURL:nil];
- 在按鈕的點擊事件方法中加載JavaScript函數(shù)
- (void)clickBtn
{
[self.webView stringByEvaluatingJavaScriptFromString:@"showAlert()"];
}
如果要添加index.html文件恳不,先將index.html文件導入項目,然后獲取文件路徑规求,利用stringWithContentsOfFile獲取內(nèi)容展示頁面
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
[self.webView loadHTMLString:[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil] baseURL:nil];
五. UIWebView界面實現(xiàn)前進卵惦、后退和刷新功能
// 前進
[self.webView goForward];
// 后退
[self.webView goBack];
// 刷新
[self.webView reload];