18.UIWebView

本文介绍了UIWebView的基本使用方法,包括创建、属性配置及方法调用等,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UIWebView

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

1. UIWebView的创建

let webView = UIWebView(frame: self.view.bounds)
webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.youkuaiyun.com/")!))
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.youkuaiyun.com/")!))
        webView.paginationMode = .LeftToRight
        webView.scalesPageToFit = true
        self.view.addSubview(webView)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值