ios - 检索 WebVie URL Swift ||无法将类型 'ViewController' 的值分配给类型 'UIWebViewDelegate?'

标签 ios swift webview

我想加载一个网页,然后能够在用户登录并被重定向后检索当前网页。我已经实现了网页的加载,但在用户移动到新页面后无法检索 URL。我拥有的当前代码是:

@IBOutlet weak var webView: UIWebView!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    needlogin()
}

func needlogin(){
    let url =  URL(string:  "https://www.instagram.com/oauth/authorize/?client_id="+clientid+"&redirect_uri="+redirecturl+"&response_type=token&scope=likes+comments+public_content+follower_list+relationships")
    let urlrequest = URLRequest(url: url!)
    webView.loadRequest(urlrequest)
   self.webView.delegate = self

}

func webViewDidFinishLoad(_ webView: UIWebView){

}

我遇到的问题是 self.webView.delegate = self .我收到错误消息:

Cannot assign value of type 'ViewController' to type 'UIWebViewDelegate?'



此外,我根本不知道如何检索 URL,希望您能提供帮助。

最佳答案

您需要遵守 UIWebviewDelegate 协议(protocol)。所以你需要做类似的事情

class ViewController: UIViewController, UIWebViewDelegate {

}

在你的类定义的顶部。

要在 webview 完成加载后检索 URL,在 webViewDidFinishLoad 方法中,您需要执行类似 webView.request.URL 的操作。

免责声明:对于 iOS + 应用程序,您应该使用 WKWebview 而不是 UIWebview。对于您的示例,这样做的方法是这样的:
import UIKit
import WebKit

class WebviewController: UIViewController, WKNavigationDelegate {

    var wkWebview : WKWebView?

    override func viewDidLoad() {
        super.viewDidLoad()

       needsLogin()

    }

   func needsLogin() {

       wkWebview = WKWebView.init(frame: self.view.bounds)
        wkWebview?.navigationDelegate = self
        self.view.addSubview(wkWebview!)

        let url =  URL(string:  "https://www.instagram.com/oauth/authorize/? client_id="+clientid+"&redirect_uri="+redirecturl+"&response_type=token&scope=likes+comments+public_content+follower_list+relationships")
        let urlRequest: URLRequest = URLRequest.init(url: url!)
        wkWebview?.load(urlRequest)

   }

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

    public func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
        print("\(error.localizedDescription)")
    }

  public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
   // This is the URL you need.
   let url = webView.url
   }
  }

关于ios - 检索 WebVie URL Swift ||无法将类型 'ViewController' 的值分配给类型 'UIWebViewDelegate?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45784234/

相关文章:

iPhone:UIImageView 淡入 - Howto?

iphone - 与NSString中的原始字节一起使用的编码

ios - SwiftUI - 如何覆盖嵌套的偏移/位置动画?

swift - 在Swift 2.2中,如何合并for循环语句?

android - 如何在 Android 中使用 Web View 访问本地主机服务器

iphone - Facebook SDK 登录对话框出现两次

ios - 先前推送 View Controller 的计时器仍在运行

swift - SwiftUI 的 ".disabled"修饰符的变化可以动画吗?

java - 如何取消加载网站的 webview?

底部带有admob广告的Android webview