三行代碼實現iOS9新功能-SFSafariViewController

來源:互聯網
上載者:User

標籤:

我們直接來看完整的代碼:

import UIKitimport SafariServicesclass 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~


三行代碼實現iOS9新功能-SFSafariViewController

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.