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

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

2016-07-17 23:09 281 查看
转在于 http://www.2cto.com/kf/201605/507960.html

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

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

为了演示这个效果,我们在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 中打开网页,比如:

 

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

 

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

 

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

 

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

 

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

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

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

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