三行代码实现iOS9新功能-SFSafariViewController

我们直接来看完整的代码:

import UIKit
import SafariServices

class ViewController: UIViewController {
    @IBAction func openWithSafariVC(sender: AnyObject) {
        let sfsVC = SFSafariViewController(URL: NSURL(string: "https://google.com")!)
        presentViewController(sfsVC, animated: true, completion: nil)
    }
}

除去导入头文件、声明类、多余的空行和大括号,真正的实现代码只有三行。

为了演示这个效果,我们在storyboard中拖入一个button,与openWithSafariVC函数建立连接。

运行,如下图所示:

点击Button按钮,效果如下图所示:

可以看到它有很多功能,比如下面的前进、后退、分享、在safari中打开,以及左上角的Done返回按钮。

而做到这些,我们一共只用了三行代码!

注意,如果没有显示成功,可能是以下问题:

1. SFSafariViewController 只能用于 iOS 9 以上

2. 你可能没有翻墙?把网址换成 https://baidu.com 试试

3. 这点基本上是常识了,打开 Info.plist,点击加号添加一项 App Transport Security Settings,在它下面添加一项 Allow Arbitrary Loads,并设置值为 YES

我们来理清一下 UIWebView、WKWebView、SFSafariViewController 之间的关系:

iOS 7 支持 UIWebView

iOS 8 支持 UIWebView、WKWebView

iOS 9 支持 UIWebView、WKWebView、SFSafariViewController

那么,SFSafariViewController 有什么优点?为什么我们要用它?

向用户展现一个网页,无非就是这么几种方式:

1. 使用 openURL(_:) 在 safari 中打开网页,比如:

UIApplication.sharedApplication().openURL(NSURL(string: "https://google.com")!)

但是这样就会导致用户离开你的应用进入 safari 中,显然我们更希望用户能一直待在我们写的应用里。(难道不是吗0.0)

2. 使用 UIWebView 或 WKWebView 来自定义。但是如果想获得 safari 的那些功能,这样做就要写不少代码。

然而有了 SFSafariViewController,我们就可以只用非常少的代码就能获得 safari 几乎所有的功能,而且用户不会离开我们的应用。

但是它自然也有缺点。它不能定制,只能通过上面代码中写的那种 present 方式出现,而不能通过 navigationController.pushViewController 的方式出现。这就导致很多场景不适合用它。

事实上,跟 SFSafariViewController 有关的方法一共才只有五个,其中两个是初始化方法,剩下的三个都是代理方法。

因此它用起来很简单,但是也导致了它不能定制的问题。虽然用 UIWebView、WKWebView 来自定义要写不少代码,但是它们的好处就是可以定制。

SFSafariViewController 只能用于 iOS 9 以后,所以我们现在的项目里还不能用它,使用 iOS 9 以前版本的用户还有很多,我们要兼容他们。不过我觉得这个新东西真的挺不错的,也许过几年真的能替代 UIWebView、WKWebView~

时间: 2024-10-11 15:05:41

三行代码实现iOS9新功能-SFSafariViewController的相关文章

修复Bug是重点 iOS9将不注重添加新功能

苹果iOS7系统时发生了界面风格的巨大改变,目前的iOS8也在延续之前的风格,只是进行了功能补充,那么iOS9是否还会继续保持这样的风格呢?据外媒消息,iOS9的确不会再次对风格进行大修大改,而是着重改进稳定性和系统优化. iOS9将不注重添加新功能(图片来自MacWorld) 据外媒从苹果内部工程师处获知,iOS9的主要工作是修复漏洞.保持系统的稳定性,并增强系统性能,并不会特别注重对新功能的开发. 另外,近期苹果因iOS8系统固件体积过大而多次被用户告上法庭,看来是起到了一定效果.据称苹果将

三行代码接入,社交软件打字时底下弹出的表情布局,自定义ViewPager+页面点标+各种功能的android小框架。

(转载请声明出处:http://www.cnblogs.com/linguanh/) 前言: 接上次分享的 ListView 动态加载类,入口:http://www.cnblogs.com/linguanh/p/4645115.html  这次分享给大家的是,刚些写好的类似社交软件打字时地下弹出的表情布局. 先看下我的默认效果图. 该效果图里面使用的图片资源,是默认的IC_lanucher,在我的类里面,你可以自定义,包括布局,几行几列,什么的,都可以自定义.底下的是小点标. 下集预告:我将在使

代码演示C#各版本新功能

代码演示C#各版本新功能 C#各版本新功能其实都能在官网搜到,但很少有人整理在一起,并通过非常简短的代码将每个新特性演示出来. 代码演示C#各版本新功能 C# 2.0版 - 2005 泛型 分部类型 匿名方法 可以为null的值类型 迭代器 协变和逆变 C# 3.0版 - 2007 自动实现的属性 匿名类型 查询表达式(LINQ) Lambda表达式 表达式树 扩展方法 var 分部方法 对象和集合初始值设定项 C# 4.0版 - 2010 dynamic 命名参数/可选参数 泛型中的协变和逆变

iOS9 新特性总结!!!

#iOS9 新特新介绍 ##一. UIStackView * 新控件:UIStackView 栈视图, 类似AppleWatch的Group * 父类:UIView * 特点: 1. 只能垂直或水平散列,因此不能完全取代Autolayout 2. 能够快速的按顺序获取到子控件 3. 批量修改间距更快 4. 批量修改对齐方式更快 *应用场景: 1. 水平-标签/自定义TabBar 2. 垂直-设置菜单 ##二. SafariServices '' SFSafariViewController *s

C# 防止同时调用=========使用读写锁三行代码简单解决多线程并发的问题

http://www.jb51.net/article/99718.htm 本文主要介绍了C#使用读写锁三行代码简单解决多线程并发写入文件时提示"文件正在由另一进程使用,因此该进程无法访问此文件"的问题.需要的朋友可以参考借鉴 在开发程序的过程中,难免少不了写入错误日志这个关键功能.实现这个功能,可以选择使用第三方日志插件,也可以选择使用数据库,还可以自己写个简单的方法把错误信息记录到日志文件. 选择最后一种方法实现的时候,若对文件操作与线程同步不熟悉,问题就有可能出现了,因为同一个文

Xcode And iOS9新特性

Xcode And iOS9 1. Xcode7 新特性 > 可直接在真机上运行自己的应用,只需要有苹果账号,无需购买苹果开发者账号. > 可设置在出现 EXC_BAD_ACCESS 错误时,显示更详细的错误信息. 设置方式:XCode->Product->Scheme->Edit Scheme 左侧选择“Run” 右侧选择“Diagnostics(诊断)” 在“Runtime Sanitization(运行时净化处理)” 勾选“Enable Address Sanitize

巧用React Fiber中的渲染字符串新功能

虽然React Fiber还没有正式发布,但是我们已经可以预先领教其带来的新的编程模式了. 在React Fiber中,render函数可以直接返回一个字符串了,换言之,一个组件可以直接渲染为一个字符串,而不是必须渲染为一个HTML模样的物体. 举个例子,下面这个控件LongString,显示一个input和一个p,p中文字可以是很长的字符串,相当于一个模板,在input中输入的字符串会用来填补p中的模板面. 代码如下. import React from 'react'; class Long

友盟新功能介绍:在线参数-备用

作为开发者您是否也碰到过这些挠头问题: 刚上线不久的应用就要修改说明文字?应用添加广告后,如何平衡用户流失和广告收入情况?如何对游戏中的道具进行合理定价? 为帮助开发者告别频繁地更新应用版本,更好的比较版本之间的用户行为及习惯,友盟针对Android开发者新推出在线参数功能.通过在线参数功能,开发者可以远程动态修改应用中的参数值,灵活调整运营策略.iOS版本近期推出. 获得更多信息和体验在线参数功能请访问www.umeng.com 什么是在线参数 在线参数是友盟推出的新功能,可以让您动态修改应用

Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc

Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc 1.1. Visual Studio2 1.2. Visual Studio 972 1.3. Visual Studio 6.02 1.4. Vs20022 1.5. Vs20032 1.6. Vs20052 1.6.1. 数据访问  Web开发     Windows Forms 方面的开发特性增强2 1.6.2. Refactoring 2