【iOS開發】偽造一個SFSafariViewController

KyXu發表於2016-03-13

iOS 9 中的 SFSafariViewController 可以使我們非常方便的傳入一個 url 來展示一個網頁,呼叫起來是下面這樣:

let safari = SFSafariViewController(URL: url)
self.presentViewController(safari, animated: true, completion: nil)

這裡我嘗試給出一個簡化版(僅僅展示網頁,沒有其他功能)的 SFSafariViewController,來方便地在 iOS 9 以下的系統中呼叫。

import UIKit
import WebKit

// 如果使用者使用 iOS 8,則沒有 SFSafariViewController,用這個 VC 來載入一個網頁
class FakeSafariViewController: UIViewController {
    
    var url:NSURL!
    let webview = WKWebView()
    
    
    // MARK: - Init
    convenience init (URL: NSURL) {
        self.init()
        self.url = URL
    }
    
    
    
    // MARK: - Main
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // webview
        webview.frame = self.view.frame
        webview.loadRequest(NSURLRequest(URL: url))
        view.addSubview(webview)
        
        // 螢幕旋轉監聽
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "screenRotate:",
            name: UIDeviceOrientationDidChangeNotification, object: nil)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    
    func screenRotate(notification:NSNotification) {
        webview.frame = self.view.frame
    }
}

呼叫時,表現起來和 SFSafariViewController 是一樣的:

let realSafari = SFSafariViewController(URL: url)
let fakeSafari = FakeSafariViewController(URL: url)

當然,如果如果你要在 iOS 8 以下的環境中使用的話,把 WKWebView 換成 UIWebView 就好了。


【Github】這段程式碼出現在了 SwiftGG 專案


相關文章