通过iOS 9 SFSafariViewController提供完整的Web浏览体验

当前,移动应用和各种网络上的内容已无所不在。多年以来, iOS开发者都是要么在APP中创建自己的web浏览体验,要么让Safari来打开URL。这两种方法都有不可避免的缺点。不过,现在这一切都改变了, iOS 9引入了SFSafariViewController类。你可以通过它在APP中提供完整的web浏览体验,无需浪费重要的开发时间。

显示Web内容的三种方法:在iOS 9中,开发者有三种方法来显示Web内容:

  • Safari:使用openURL(_:)在Safari中展示页面,会不得不让用户离开你的应用。

  • 自定义浏览体验:你可以利用WKWebView或UIWebView从头开始创建浏览体验。

  • SFSafariViewController :通过SFSafariViewController,你几乎可以使用所有Safari的一些便利特性,而无需让用户离开你的应用。

在Safari View Controller中打开网页

在我们使用SFSafariViewController之前,需要引入Safari Services。在ViewController.swift的顶部,在UIKit的import语句下面添加如下的代码:

1
import SafariServices

下一步,更新openWithSafariVC ( _ :)的实现,如下所示:

1
2
3
4
5
@IBAction func openWithSafariVC(sender: AnyObject)
{
     let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!)
     self.presentViewController(svc, animated:  true , completion: nil)
}

运行应用并点击底部的"Open with safari view controller"按钮,现在能看到网页是在SFSafariViewController实例中展示的。

30.png

现在,我们既让用户停留在我们的应用中,又让用户能利用Safari的全部优点。在tab bar中,用户可以呼出分享菜单,也能把网页添加到收藏,或者是在Safari中打开网页。
还有很多有意思的配置可以利用。比如,我们可以给entersReaderIfAvailable传入true,来让用户能轻松调出阅读器模式:

1
2
3
4
5
@IBAction func openWithSafariVC(sender: AnyObject)
{
     let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!, entersReaderIfAvailable:  true )
     self.presentViewController(svc, animated:  true , completion: nil)
}

此外, Safari view controller 也使用tint color。这能让你的应用在保持统一风格的同时,也保留熟悉的Safari的UI

然而,还有一个问题是目前用户无法关闭这个页面。现在让我们来解决这个问题。

SFSafariViewControllerDelegate协议

要关闭view controller,我们需要遵从SFSafariViewControllerDelegate协议。打开ViewController.swift并使ViewController类遵从SFSafariViewControllerDelegate协议。

1
2
3
4
class ViewController: UIViewController, SFSafariViewControllerDelegate
{
     ...
}

接着,将下面的委托方法添加到ViewController类:

1
2
3
4
func safariViewControllerDidFinish(controller: SFSafariViewController)
{
     controller.dismissViewControllerAnimated( true , completion: nil)
}

当用户点击Safari view controller上的Done按钮时,会调用该委托方法。它应该被用来关闭该view controller,并返回到你的应用。

剩下要做的事就是把我们的view controller设为Safari view controller的delegate。更新openWithSafariVC ( _ :)方法的实现,如下所示:

1
2
3
4
5
6
@IBAction func openWithSafariVC(sender: AnyObject)
{
     let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!)
     svc.delegate = self
     self.presentViewController(svc, animated:  true , completion: nil)
}

如果你运行应用并打开Safari view controller,你会看到,你现在可以通过点击右上角的Done按钮来关闭Safari view controller了。

结论

View controller是非常容易使用。事实上,这是我见过的最小的API之一了,它只有两个初始化方法和两个委托方法。即便如此,它将Safari中用户期望的全部功能带到了你的应用中。

同样令人兴奋的是,开发者将不再需要花时间创建自定义的Web浏览器。只需SFSafariViewController的几行代码,就能为你的应用带来一流的web浏览体验。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值