在前面, 我们已经了解过了 UIWebView, 以及网络的一些概念, 现在让我们来做一个简单的浏览器, 网络请求的一些细节~
在这里, 我们会使用 UIWebView 与网络最简单的交互, 那就是使用 URL 加载网络的数据.
1.搭建界面
2.实现网络交互
关联控件, 以及获取属性
class ViewController: UIViewController, UISearchBarDelegate, UIWebViewDelegate {
// 搜索栏
@IBOutlet weak var searchBar: UISearchBar!
// WebView
@IBOutlet weak var webView: UIWebView!
// 后退Button
@IBOutlet weak var goBack: UIBarButtonItem!
// 前进Button
@IBOutlet weak var goForward: UIBarButtonItem!
}
监听点击事件
@IBAction func goToBack(sender: UIBarButtonItem) {
webView.goBack()
}
@IBAction func goToForward(sender: UIBarButtonItem) {
webView.goForward()
}
加载网络数据
override func viewDidLoad() {
super.viewDidLoad()
// 1.设置访问资源 - 百度搜索
let url = NSURL(string: "http://www.baidu.com")!
// 2.建立网络请求
let request = NSURLRequest(URL: url)
// 3.加载网络请求
webView.loadRequest(request)
// 4.设置 UISearchBar 的代理对象
searchBar.delegate = self
webView.delegate = self
}
UISearchBar 的代理方法
// 使用 UISearchBar 的代理方法
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
// 1.获取当前 UISearchBar 的 Text
var str = searchBar.text
// 2.判断 UISearchBar 是否有前缀, 如果有, 就使用自定义的网址, 如果没有就默认使用百度搜索
if !str.hasPrefix("http://") {
str = "http://www.baidu.com/s?word=" + str
}
// 3.将输入的文字或者是需要搜索的东西转成 UTF8 格式, 并且解包
let url = NSURL(string: str.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)
// 4.建立网络请求
let request = NSURLRequest(URL: url!)
// 5.加载网络请求
webView.loadRequest(request)
// 6.关闭 UISearchBar 的弹出键盘
self.view.endEditing(true)
}
优化体验
// UIWebView 代理方法, 自动检测是否有加载过数据, 如果有的话就会根据系统的判断来显示前进或者后退的按钮
func webViewDidFinishLoad(webView: UIWebView) {
self.goBack.enabled = webView.canGoBack
self.goForward.enabled = webView.canGoForward
}
3.最终效果
1
2
3
好了,这次我们就讲到这里, 下次我们继续