您的位置:首页 > 移动开发

18.UIWebView

2016-03-01 20:15 369 查看

UIWebView

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

1. UIWebView的创建

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)


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

运行程序:



上面的代码中我们设置了加载csdn主页,并设置页面缩放以适应界面

2. UIWebView的属性详解

// 代理
unowned(unsafe) public var delegate: UIWebViewDelegate?
@available(iOS 5.0, *)
// 获取scrollView
public 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 UIKit

class 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.
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uiwebview iOS开发 swift