2017-02-12 5 views
0

Ich habe einen Tab-Bar-Controller, der zwei verschiedene View-Controller hat - jeweils mit einem WKWebView.Zugriff auf WebView von einer anderen Klasse Swift 3

Dies ist in meinem WebViewController: (Ich kann grundsätzlich auf der Basis der URL entziffern, wenn ich die ID auf die andere webView zu werfen brauchen

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

das Teil Ich versuche das bekommen zuzugreifen. webView der anderen Klasse die URL einer Seite zu ändern, die bereits geladen ist.

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 
} 

ich habe auch versucht, die oben mit einer Klasse-Funktion innerhalb HTMLSermonAudioController und anderen verschiedenen Methoden verwenden, aber ich kann einfach nicht scheinen, Zugriff auf

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. 
} 

}

Da die webView in der Überschreibung func Loadview ist, ist es schwer für mich, darauf zuzugreifen. Gott sei Dank für hybride Apps, denn sobald ich diese letzte Hürde überwunden habe, muss ich mir keinen schnelleren Code mehr zulegen.

Antwort

1

landete ich herauszufinden, wie es

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)) 
} 

In anderen Regler mit NotificationCenter zu tun:

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) 
    } 
Verwandte Themen