webViewDelegate y function

Estoy escribiendo un pequeño webBrowser en forma rápida y cuando alguien hace clic en un enlace dentro de un webView , esto debe detectarse y el enlace está abierto en otra view . Quería implementar esto colocando el código para la function webView dentro de un file separado, de modo que pueda usar la function varias veces sin pegarla. La cosa es que la function no se recibe cuando alguien hace clic en un enlace. ¿Debería agregar algo a la class ViewController oa la class para la function webView ?

 import Foundation import UIKit class myWebViewController: UIWebView { let VC1 = ViewController(nibName: nil, bundle: nil) let VC2 = secondViewController(nibName: nil, bundle: nil) func webView(webView: UIWebView!, shouldStartLoadWithRequest request: NSURLRequest!, navigationType: UIWebViewNavigationType) -> Bool { if(navigationType == UIWebViewNavigationType.LinkClicked){ var url = (request.URL) currentURL=url webView.stopLoading() if(webView.accessibilityIdentifier == "second"){ VC2.performSegueWithIdentifier("first", sender: VC2) } else { VC1.performSegueWithIdentifier("second", sender: VC1) } // self.delegate?.didReceiveAPIResults(jsonResult) // // with // // dispatch_sync(dispatch_get_main_queue()) // { // self.delegate?.didReceiveAPIResults(jsonResult) // } } return true } } 

Aquí hay una versión que usa WKWebView y swift. Abre el enlace de clic en Safari mientras la navigation funciona normalmente si usa la dirección web.

 class AppDelegate: UIResponder, UIApplicationDelegate { lazy var window: UIWindow = { let window = UIWindow(frame: UIScreen.mainScreen().bounds) window.backgroundColor = UIColor.whiteColor() window.rootViewController = UINavigationController(rootViewController: ViewController()) return window }() func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { window.makeKeyAndVisible() return true } } class ViewController: UIViewController, WKNavigationDelegate, UITextFieldDelegate { lazy var webView:WKWebView = { let webView = WKWebView(frame: CGRectZero) webView.navigationDelegate = self return webView }() let textField: UITextField = { let textField = UITextField(frame: CGRectMake(0, 6, 100, 30)) textField.clearButtonMode = .WhileEditing textField.placeholder = "Enter your url here:" return textField }() override func loadView() { view = webView } override func viewDidLoad() { super.viewDidLoad() textField.delegate = self navigationItem.titleView = textField } func textFieldShouldReturn(textField: UITextField!) -> Bool { if textField.isFirstResponder(){ textField.resignFirstResponder() loadCurrentUrl() } return true } func loadCurrentUrl(){ let url = NSURL(string: textField.text) let request = NSURLRequest(URL: url) webView.loadRequest(request) } func webView(webView: WKWebView!, decidePolicyForNavigationAction navigationAction: WKNavigationAction!, decisionHandler: ((WKNavigationActionPolicy) -> Void)!) { if navigationAction.navigationType == .LinkActivated{ UIApplication.shanetworkingApplication().openURL(navigationAction.request.URL) decisionHandler(.Cancel) }else{ decisionHandler(.Allow) } } } 

En primer lugar, debe configurar el delegado para UIWebView . Luego, implementa este método:

 webView:shouldStartLoadWithRequest:navigationType 

Vea la descripción de este método (Objective-C)

Entonces, tal vez te olvidaste de configurar el delegado. Mira esto 😉