2016-12-19 2 views
0

ich eine Webansicht in einem Viewcontroller erstellt haben und eine Seite wie dieser LadenGet-Parameter über einen Link in einer Webansicht

func loadAddress(){ 
    let requestURL = NSURL(string:"http://www.example.com/") 
    let request = NSURLRequest(url: requestURL as! URL) 
    webview.loadRequest(request as URLRequest) 
} 

Und das viewDidLoad in

Aufruf

I haben somelinks in der Seite mit URL-Parametern wie diesem

http://www.example.com?id=1&title=ABC 
Jetzt

, wenn ein Benutzer auf diesen Link aus der App klickt dann statt auf URL umleiten, möchte ich die Parameter von URL erhalten, und öffnen Sie ein Dialogfeld, in iOS

Ich habe einige Beispiele in Objective C gefunden, aber ich bin Suche nach einer Lösung in Swift 3

PS: ich habe Zugriff auf diese HTML-Webseite I Links von Xcode nach Bedarf

EDIT ersetzen: Hier ist, was ich, dass ich versucht habe, ist in der gleichen Datei, wo mein webview schrieb diese Funktion

func webView(_ webView: UIWebView,shouldStartLoadWith request: URLRequest,navigationType: UIWebViewNavigationType) -> Bool { 

    let scheme = request.url! 
    NSLog(scheme.absoluteString) 

    return false 

} 

und sorgte auch dafür, dass die Klasse ein Delegierter ist

enter image description here

zur Webansicht, was ich falsch mache?

+0

Unrelated zu Ihrem Problem aussieht, aber bitte beachten Sie, dass Sie sollten nicht niedergeschlagenen NSURL URL oder NSURLRequest zu URLRequest [benutzen Sie einfach die neuen Strukturen direkt] (http: //stackoverflow.com/questions/37812286/swift-3-urlsession-shared-ambiguous-Referenz-zu-Mitglied-Datataskwithcomplet/37812485 # 37812485). – Moritz

+0

xcode gab Fehler und schlug diesen Fix für sich vor –

+0

Wahrscheinlich, aber es ist irrelevant. Xcode ist nur eine IDE, es ist nicht immer richtig. Manchmal ist es einfach falsch ...;) TL; DR: Nicht runterkommen, wenn es nicht nötig ist, was auch immer Xcode Ihnen sagt. – Moritz

Antwort

0

sollten Sie die webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool-Methode behandeln, die URLRequest als Parameter verwendet. In dieser Methode können Sie mit dieser URL machen, was Sie wollen.

Vergessen Sie nicht, Ihre Klasse als Vertreter der Webansicht festzulegen.

Wenn Sie mit der Query-String spielen möchten, können Sie Inspiration von diesem objective-c answer

+0

unter dieser Funktion habe ich meinen Code sieht so aus, lassen Sie Schema = request.url! NSLog (scheme.path) zurück wahr –

+0

und klasse ist ein delegierter von webview, aber nichts druckt im log, wenn ich auf den link –

+0

was klicken, wenn Sie NSLog schreiben (scheme.absoluteSring)? –

0

Ich habe eine Lösung selbst gefunden zu bekommen, der Code, den ich geschrieben hatte, war richtig, ich hatte nur sicher auch, dass meine Klasse machen UIWebViewDelegate implementiert

so die Klasse wie dieses

class Mainbillboard: UIViewController,UIWebViewDelegate { 


@IBOutlet weak var activity: UIActivityIndicatorView! 
@IBOutlet weak var webview: UIWebView! 


override func viewDidLoad() { 
    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) 
    loadAddress() 
} 

func loadAddress(){ 
    let requestURL = NSURL(string:"example.com") 
    let request = NSURLRequest(url: requestURL as! URL) 
    webview.loadRequest(request as URLRequest) 

} 

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 

    let scheme = request.url! 
    NSLog(scheme.absoluteString) 
    NSLog("here it worked!!") 

    return true 

} 


func webViewDidStartLoad(_:UIWebView){ 
    self.view.bringSubview(toFront: self.activity) 
    activity.startAnimating() 
    NSLog("Indicator is loading") 

} 

func webViewDidFinishLoad(_:UIWebView){ 
    activity.stopAnimating() 
    NSLog("Indicator stopped loading") 
} 

} 
+0

ja, aber Sie haben gesagt, dass Sie, 3 mal –

Verwandte Themen