2017-02-12 28 views
0

У меня есть контроллер панели вкладок, который имеет два разных контроллера вида - каждый с WKWebView в них.Доступ к webView из другого класса Swift 3

Это внутри моей WebViewController: (я в принципе можно расшифровать на основе URL, если мне нужно бросить идентификатор другой Webview

HTMLSermonAudioController().webView.load(URLRequest(url: url)) 

является частью я пытаюсь получить доступ к. WebView другого класса, чтобы изменить URL страницы, которая уже загружена.

if requestURL.absoluteString.hasPrefix("bocaudio://?url="){ 
let url = URL(string: "https://storage.googleapis.com/boc-audio/123.mp3")! 
HTMLSermonAudioController().webView.load(URLRequest(url: url)) 
tabBarController?.selectedIndex = 3 
} 

Я также попытался выше с помощью функции класса внутри HTMLSermonAudioController и другие различные методы, но я просто не могу для доступа

import UIKit 
import WebKit 

class HTMLSermonAudioController: UIViewController, WKNavigationDelegate { 
var webView: WKWebView! 
override func loadView() { 
    webView = WKWebView() 
    webView.navigationDelegate = self 
    view = webView 
    let url = URL(string: "https://www.boc.domain/audioapp/290/")! 
    webView.load(URLRequest(url: url)) 
    webView.allowsBackForwardNavigationGestures = true 
} 


class func test(){ 
    let url = URL(string: "https://www.boc.domain/audioapp/290/")! 
    HTMLSermonAudioController().webView.load(URLRequest(url: url)) 
} 


func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 
    title = webView.title 
} 

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { 
    decisionHandler(.allow) 
} 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

}

Поскольку Webview находится в переопределение Func loadView, это трудно для меня, чтобы получить доступ к нему. Слава Богу, для гибридных приложений, потому что, как только я преодолю это последнее препятствие, мне не придется беспокоиться о более быстрых кодах.

ответ

1

я в конечном итоге выяснить, как сделать это с NotificationCenter

NotificationCenter.default.addObserver(self, selector: #selector(HTMLSermonAudioController.connectWithSpecifiedItem), name: urlNotification, object: nil) 


func connectWithSpecifiedItem(notification: NSNotification){ 
    let itemUrl = notification.object as! NSURL 

    //webView.load(URLRequest(url: url)) 
    self.webView!.load(URLRequest(url: itemUrl as URL)) 
} 

В другой контроллер:

if requestURL.absoluteString.hasPrefix("https://www.place.domain/audioapp/"){ 
     tabBarController?.selectedIndex = 3 
     sendData(url: requestURL) 
     decisionHandler(.cancel) 
     return 
    } 
func sendData(url: URL){ 
     NotificationCenter.default.post(name: HTMLSermonAudioController().urlNotification, object: requestURL) 
    }