【UIWebView網絡瀏覽器】
通過webView的loadRequest方法可以發送請求顯示相應的網站,例如:
NSURL *url = [NSURL URLWithString:@"http://m.baidu.com"];// 創建請求數據NSURLRequest *request = [NSURLRequest requestWithURL:url];// 向服務器發送請求[self.webView loadRequest:request];
通過使用searchBar,可以實現網址的輸入,searchBar有一個delegate屬性可以將控制器設為其代理,下面實現了一個簡易的瀏覽器。
首先是調用代理方法來監聽搜索按鈕:
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{[self.view endEditing:YES];[self searchWithNSStringUrl:searchBar.text];}
然后實現搜索欄信息的解析,注意沒有http://要補全的邏輯方法:
使用NSStringFromRange方法可以實現字符串的子串位置查找,通過判斷range的location成員是否等于NSNotFound可以判斷是否匹配失敗。
- (void)searchWithNSStringUrl:(NSString *)surl{NSRange range = [surl rangeOfString:@"http://"];NSLog(@"range = %@",NSStringFromRange(range));if (range.location == NSNotFound) {NSString *head = @"http://";surl = [head stringByAppendingString:surl];}NSURL *url = [NSURL URLWithString:surl];// 創建請求數據NSURLRequest *request = [NSURLRequest requestWithURL:url];// 向服務器發送請求[self.webView loadRequest:request];}
直接判斷字符串是否以某字符串開頭可以直接使用NSString的hasPrefix:方法。
前進和后退的實現:直接將按鈕的前進和后退事件和按鈕綁定。
一些細節:
1.在不能后退和前進時應該將按鈕禁用,不同頁面是通過鏈表連接的。
判斷的方式:通過判斷webView的鏈表,也可以通過canGoBack和canGoForward兩個BOOL變量來判斷。
2.地址欄應該隨著網頁內容而改變,通過獲取WebView的URL,并通過absoluteString方法轉為字符串:
- (void)webViewDidStartLoad:(UIWebView *)webView{NSURL *url = webView.request.URL;NSString *surl = [url absoluteString];self.searchBar.text = surl;
}
使用HTML:
PhoneGap是基于HTML 5開發的一套框架,只要會做網頁就可以開發應用,但是不能使用原生的硬件。
好處是可以一次性開發多個平臺的應用。
【利用UIWebView加載文件】
可以通過Bundle或者沙盒加載。
傳入文件的URL即可加載doc、txt、圖片、pdf等各種內容。
例如讀入一本pdf:
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"English.pdf" withExtension:nil];
NSURLRequest *request = [NSURLRequest requestWithURL:fileURL];
[self.webView loadRequest:request];
還可以通過dataDetectorTypes來設定需要高亮鏈接的文本類型:例如電話、地址、郵箱等 _webView.dataDetectorTypes = UIDataDetectorTypeAll;
【利用UIWebView加載HTML】
[self.webView loadHTMLString:@"<h1>hello</h1>" baseURL:nil];
利用這個功能可以實現刪除廣告等功能。 【UIWebView能夠加載文件的原因】
MIME type是一個互聯網標準,服務器將MIME標識符放入傳送的數據中告訴瀏覽器使用哪種插件讀取相關文件,MIME類型可以包含視頻、圖像、文本等數據。
網絡通過二進制數據流來傳輸數據,客戶端通過MIME type能夠知道如何處理接收的數據。