网络视图UIwebView
(一)概述:一般是加载网页用的。同时,一些第三方登陆给的接口/回调 地址也需要通过webView和代理来实现授权。但是毕竟是网络视图,和原生控件比起来,速度慢了不是一点半点。甚至会有明显的卡顿。在XCODE中可以调用js语言来修改网页内容。
(二)白名单:随着ios9和xcode7的出现,在有关网络开发的应用都会默认采用https传输。所以一般要设置白名单。在info.plist中,直接用xml打开写入即可。
<key>NSAppTransportSecurity</key>
<dict>
<!--Include to allow all connections (DANGER)-->
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
(三)通过网络请求加载webView
webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.baidu.com")!))
(四)通过HTML字符串加载webView:大部分的网页语言都是HTML写的,有了这个,使加载本地的网页文件成为可能。不要写好htmleString。然后loadHTML即可。
(五)通过NSData数据加载webView:通过NSData是三种方法里最灵活的。使用这种方法不再限定数据格式。因此,gif等展示也使用这种方式。(PS:YYIMage是这么做的吗?)
这时候拿到一个NSData,用webView loadData即可。
public func loadRequest(request: NSURLRequest) public func loadHTMLString(string: String, baseURL: NSURL?) public func loadData(data: NSData, MIMEType: String, textEncodingName: String, baseURL: NSURL)
(六)常用方法:
public func reload() // 重新加载 public func stopLoading() // 停止加载 public func goBack() // 如果有上一界面,退回 public func goForward() // 如果有上一界面,前进 public var canGoBack: Bool { get } // 判断可以回退 public var canGoForward: Bool { get } // 判断可以倩姐 public var loading: Bool { get } // 是否在loading public var scalesPageToFit: Bool // 设置界面的尺寸是否适配UIWebView public var dataDetectorTypes: UIDataDetectorTypes // 探测网页一些字段,假如探测出是电话号码,单击直接跳转打电话界面
探测枚举:支持位运算 |进行多选
public struct UIDataDetectorTypes : OptionSetType { public init(rawValue: UInt) public static var PhoneNumber: UIDataDetectorTypes { get } // Phone number detection 探测电话 public static var Link: UIDataDetectorTypes { get } // URL detection 探测网页链接 @available(iOS 4.0, *) public static var Address: UIDataDetectorTypes { get } // Street address detection 探测地址 @available(iOS 4.0, *) public static var CalendarEvent: UIDataDetectorTypes { get } // Event detection 探测日历 public static var None: UIDataDetectorTypes { get } // No detection at all 不探测 public static var All: UIDataDetectorTypes { get } // All types 探测所有 }
(七)代理方法:回调方法可以返回当前网络视图的状态
public protocol UIWebViewDelegate : NSObjectProtocol { @available(iOS 2.0, *) optional public func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool // 将要加载请求时 @available(iOS 2.0, *) optional public func webViewDidStartLoad(webView: UIWebView) // 已经开始加载 @available(iOS 2.0, *) optional public func webViewDidFinishLoad(webView: UIWebView) // 加载结束 @available(iOS 2.0, *) optional public func webView(webView: UIWebView, didFailLoadWithError error: NSError?) // 加载失败 }
其中,第三方加载都会在将要加载请求中拿到 code码,BOOL是真则返回回调页,假则不回调。