18.UIWebView

来源:互联网 发布:java replace第一个 编辑:程序博客网 时间:2024/05/15 01:12

UIWebView

UIWebView看名字就知道是可以加载web页面的控件, 下面我们学习如何使用它

1. UIWebView的创建

let webView = UIWebView(frame: self.view.bounds)webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.csdn.net/")!))webView.paginationMode = .LeftToRightwebView.scalesPageToFit = trueself.view.addSubview(webView)

注意在iOS9上的系统中要在info.plist中设置一下, 具体参考UIImageView中加载网络图片的部分

运行程序:
创建
上面的代码中我们设置了加载csdn主页,并设置页面缩放以适应界面

2. UIWebView的属性详解

// 代理unowned(unsafe) public var delegate: UIWebViewDelegate?@available(iOS 5.0, *)// 获取scrollViewpublic var scrollView: UIScrollView { get }// 获取请求public var request: NSURLRequest? { get }// 是否可上一页public var canGoBack: Bool { get }// 是否可下一页public var canGoForward: Bool { get }// 是否正在加载public var loading: Bool { get }// 是否缩放页面以适应界面public var scalesPageToFit: Bool// 数据类型检测,和UITextView中一样@available(iOS 3.0, *)public var dataDetectorTypes: UIDataDetectorTypes// 使用内置html5播放视频还是使用本地的播放器全屏播放, iPhone Safari默认为false, iPad Safari默认为true@available(iOS 4.0, *)public var allowsInlineMediaPlayback: Bool // 是否由用户来启动播放, 默认iPhone 和 iPad Safari都为true@available(iOS 4.0, *)public var mediaPlaybackRequiresUserAction: Bool// 是否允许AirPlay, 默认iPhone 和 iPad Safari都为true@available(iOS 5.0, *)public var mediaPlaybackAllowsAirPlay: Bool// 是否将内容加载到内存中再渲染, 默认iPhone 和 iPad Safari都为false@available(iOS 6.0, *)public var suppressesIncrementalRendering: Bool// 用户是否点击输入元素来显示键盘, 默认为true@available(iOS 6.0, *)public var keyboardDisplayRequiresUserAction: Bool// 自动分页模式,具体查看下面的内容@available(iOS 7.0, *)public var paginationMode: UIWebPaginationMode// CSS加载方式@available(iOS 7.0, *)public var paginationBreakingMode: UIWebPaginationBreakingMode// 页长@available(iOS 7.0, *)public var pageLength: CGFloat// 页间距@available(iOS 7.0, *)public var gapBetweenPages: CGFloat// 页数@available(iOS 7.0, *)public var pageCount: Int { get }// 是否允许画中画@available(iOS 9.0, *)public var allowsPictureInPictureMediaPlayback: Bool// 是否允许链接预览, 默认为false@available(iOS 9.0, *)public var allowsLinkPreview: Bool 

分页模式:

多余超出部分public enum UIWebPaginationMode : Int {    case Unpaginated // 不分页    case LeftToRight // 由左到右    case TopToBottom // 由上到下    case BottomToTop // 由下到上    case RightToLeft // 由右到左}

CSS加载方式:

public enum UIWebPaginationBreakingMode : Int {    case Page // 页    case Column // 列}

3. UIWebView的方法

// 加载请求的3种方式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()// 执行js代码public func stringByEvaluatingJavaScriptFromString(script: String) -> String?

4. UIWebView的代理

我们查看UIWebViewDelegate的定义

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?)}

5.完整代码

特别说明一下, 对于app中经常变动的部分, 用UIWebView是非常有用的, 像p2p行业, 基本上个把星期就推出一个新的活动, 让做web前端的兄弟把活动页写好, 后端的兄弟将内容放到约定好的地址,app中用UIWebView加载一下即可, 这样就不用每次出活动都更新一版了, 事实上你也不可能那么及时, app审核也要一个星期, 要是后端的兄弟在没有协商的情况下就放了一些内容(有次审核的那天, 后端的哥们上了个抽奖的转盘,奖品还有iPhone, 还没有告诉我们 ), 结果被无情的审核不通过,好了扯远了.

下面是完成代码:

import UIKitclass ViewController12: UIViewController {    override func viewDidLoad() {        super.viewDidLoad()        // Do any additional setup after loading the view.        let webView = UIWebView(frame: self.view.bounds)        webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.csdn.net/")!))        webView.paginationMode = .LeftToRight        webView.scalesPageToFit = true        self.view.addSubview(webView)    }    override func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()        // Dispose of any resources that can be recreated.    }}
1 0
原创粉丝点击