webViewDelegate和功能

webViewDelegate和功能

我正在快速编写一个小的webBrowser,当有人单击webView内的链接时,需要检测到该链接,并在另一个view中打开该链接。我想通过将webView函数的代码放在一个单独的文件中来实现此目的,这样我将能够多次使用该函数而无需复制粘贴它。事实是,当有人单击链接时,不会调用该函数。我应该在ViewController类中还是在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
}

}

最佳答案

这是使用WKWebView和swift的版本。如果您使用网址,它会在safari中打开单击的链接,而导航正常工作。

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.sharedApplication().openURL(navigationAction.request.URL)
      decisionHandler(.Cancel)

    }else{

      decisionHandler(.Allow)

    }

  }
}

关于ios - webViewDelegate和功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25011691/

10-10 21:02