如何在Swift中的UIWebView中加载URL?


68

我有以下代码:

UIWebView.loadRequest(NSURLRequest(URL: NSURL(string: "google.ca")))

我收到以下错误:

“ NSURLRequest”不可转换为UIWebView。

知道是什么问题吗?


请注意,“ shouldStartLoadWithRequest”方法(仅适用于Google)似乎要在2016年推出。希望对您有所帮助
Fattie

Answers:


60

loadRequest:是实例方法,不是类方法。您应该尝试使用UIWebview的实例作为接收器而不是类本身来调用此方法。

webviewInstance.loadRequest(NSURLRequest(URL: NSURL(string: "google.ca")!))

但是,正如@radex在下面正确指出的那样,您还可以利用currying来调用如下函数:

UIWebView.loadRequest(webviewInstance)(NSURLRequest(URL: NSURL(string: "google.ca")!))   

迅捷5

webviewInstance.load(NSURLRequest(url: NSURL(string: "google.ca")! as URL) as URLRequest)

1
谢谢。我连接了@IBOutlet并使其正常工作。太棒了!:)
用户

3
@ 0x7fffffff不是错误。Swift中的实例方法是咖喱的类方法,将实例对象作为其幕后的第一个参数。因此,您实质上可以说UIWebView.loadRequest(webviewInstance)(…)
radex 2014年

2
Swift 3版本: webviewInstance.loadRequest(NSURLRequest(url: NSURL(string: "google.ca")! as URL) as URLRequest)
Mohit Singh

Swift 4.2版本:“ webviewInstance.load(URLRequest(URL:URL(string:“ google.ca”))))'
SebastianWeiß19年

33

Swift中的UIWebView

@IBOutlet weak var webView: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()
        let url = URL (string: "url here")
        let requestObj = URLRequest(url: url!)
        webView.loadRequest(requestObj)
    // Do any additional setup after loading the view.
}

//////////////////////////////////////////////////// ////////////////////如果要使用webkit

@IBOutlet weak var webView: WKWebView!
override func viewDidLoad() {
    super.viewDidLoad()

    let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.webView.frame.size.height))
    self.view.addSubview(webView)
    let url = URL(string: "your URL")
    webView.load(URLRequest(url: url!))`

发生什么问题
Hardik Bar

谢谢。它节省了我的时间
ssowri1 '18

28

尝试这个:

  1. 将UIWebView添加到视图。

  2. 使用助手编辑器连接UIWebview插座,并将其命名为“ webview”。

  3. UIWebView加载URL。

    @IBOutlet weak var webView: UIWebView!
    
    override func viewDidLoad() {
       super.viewDidLoad()
        // Your webView code goes here
       let url = URL(string: "https://www.example.com")
       let requestObj = URLRequest(url: url! as URL)
       webView.load(requestObj)
    }
    

并运行该应用程序!


1
它会构建应用程序,但随后还会在控制台中引发错误:libc ++ abi.dylib:以未捕获的NSException类型异常终止
Andres SK

可能是因为您的IBOutlet不存在,请删除该插座连接并正确连接。
Nagarjun 2015年

1
我再次@IBOutlet weak var myWebView: UIWebView!将其重新连接,但错误仍在显示。
安德列斯SK

我和@andufo有相同的问题。我想摆脱这个问题的唯一方法是从头开始。
MastaBaba '16

可能是因为您的webView是可选值。尝试添加?myWebView?.loadRequest(requestObj);
arteepa

10

Swift 3在URL和URLRequest上不再使用NS前缀,因此更新后的代码将是:

let url = URL(string: "your_url_here")
yourWebView.loadRequest(URLRequest(url: url!))

9

在Swift 3中,您可以这样做:

@IBOutlet weak var webview: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Web view load
    let url = URL (string: "http://www.example.com/")
    let request = URLRequest(url: url!)
    webview.loadRequest(request)
}

记住要在添加权限Info.plist,添加以下值:

信息清单


5

Swift 3-Xcode 8.1

 @IBOutlet weak var myWebView: UIWebView!

    override func viewDidLoad() {
            super.viewDidLoad()

            let url = URL (string: "https://ir.linkedin.com/in/razipour1993")
            let requestObj = URLRequest(url: url!)
            myWebView.loadRequest(requestObj)

        }

请考虑编辑您的帖子以添加说明,这将有助于OP和其他人理解您的答案
CallumDA


5

在Swift 4或4.2中,您可以这样使用:

  1. 添加WKWebView并连接到您的视图控制器。
  2. 您的看法就像下面这样:

     import UIKit
     import WebKit
    
    class ViewController: UIViewController {
    
       @IBOutlet weak var wkwebview: WKWebView!
    
        override func viewDidLoad() {
           super.viewDidLoad()
    
          let request = URLRequest(url: URL(string: "**your URL**")!)        
          wkwebview?.load(request)
    
      }
    
    }
    
  3. 允许允许任意加载true info.plist

      <key>NSAppTransportSecurity</key>
         <dict>
           <key>Allow Arbitrary Loads</key>
              <true/>
        </dict>
    

    注意info.plist看起来像下面

在此处输入图片说明


只需提及我需要在目标->常规选项卡中添加框架WebKit
Dasoga,

4

将URL加载到WebView非常容易。只需在情节提要中创建一个WebView,然后就可以使用以下代码加载url。

    let url = NSURL (string: "https://www.simplifiedios.net");
    let request = NSURLRequest(URL: url!);
    webView.loadRequest(request);

就这么简单,只有三行代码:)

参考:UIWebView示例


4

UIWebView loadRequest:使用NSURL对象创建NSURLRequest,然后将请求传递给uiwebview它,将请求的URL加载到Web视图中。

 override func viewDidLoad() {
     super.viewDidLoad()
     // Do any additional setup after loading the view, typically from a nib.
     let url = NSURL (string: "http://www.google.com");
     let requestObj = NSURLRequest(URL: url!);
     myWebView.loadRequest(requestObj);
     self.view.addSubview(myWebView)
  }

有关更多参考:

http://sourcefreeze.com/uiwebview-example-using-swift-in-ios/


3

使用Swift语言的Webview

let url = URL(string: "http://example.com")
   webview.loadRequest(URLRequest(url: url!))

3

简单,经过测试且可以100%工作

导入webkit:

import WebKit

将IBOutlet分配给webview:

var webView : WKWebView!

设置委托:

class ViewController: UIViewController , WKNavigationDelegate{

在viewDidLoad()上编写代码:

// loading URL :
let myBlog = "https://stackoverflow.com/users/4600136/mr-javed-multani?tab=profile"
let url = NSURL(string: myBlog)
    let request = NSURLRequest(url: url! as URL)

    // init and load request in webview.
    webView = WKWebView(frame: self.view.frame)
    webView.navigationDelegate = self
    webView.load(request as URLRequest)
    self.view.addSubview(webView)
    self.view.sendSubview(toBack: webView)

编写委托方法:

//MARK:- WKNavigationDelegate

func webView(webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: NSError) {
print(error.localizedDescription)
}


 func webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
print("Strat to load")
    }

 func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
print("finish to load")
}

看起来像: 在此处输入图片说明


3

快速4.2、5+

@IBOutlet weak var webView: UIWebView!

    override func viewDidLoad() {
       super.viewDidLoad()
           //Func Gose Here 
          let url = URL(string: link)
          let requestObj = URLRequest(url: url! as URL)
           webView.loadRequest(requestObj)

       }

2

对于Swift 3.1及更高版本

let url = NSURL (string: "Your Url")
let requestObj = NSURLRequest(url: url as! URL);
YourWebViewName.loadRequest(requestObj as URLRequest)

2

Swift 4更新以编程方式创建WebView。

import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {

var webView: WKWebView!

override func loadView() {
    let webConfiguration = WKWebViewConfiguration()
    webView = WKWebView(frame: .zero, configuration: webConfiguration)
    webView.uiDelegate = self
    view = webView
}
override func viewDidLoad() {
    super.viewDidLoad()

    let myURL = URL(string: "https://www.apple.com")
    let myRequest = URLRequest(url: myURL!)
    webView.loadRequest(myRequest)
}}

0
import UIKit

class ViewController: UIViewController{

@IBOutlet weak var webView: UIWebView!



override func viewDidLoad() {
   super.viewDidLoad()
       //Func Gose Here 
      loadUrl()

   } 
 func loadUrl(){

   let url = URL(string: "Url which you want to load(www.google.com)")
   let requestObj = URLRequest(url: url! as URL)
   webView.load(requestObj)
 }

}

0

您可以像这样加载页面:

let url: URL = URL(string:"https://google.com")!
webView.loadRequest(URLRequest.init(url: url))

还是单行方法:

webView.loadRequest(URLRequest.init(url: URL(string: "https://google.com")!))

webView是您的出口变量。


-1

尝试这个

let url = NSURL (string: "http://www.apple.com");
myWebView.loadRequest(NSURLRequest(URL: url!));

1
如何停止加载符号的运行?页面加载后,它可以继续正常运行。
马林

@Marin您需要使用开始/停止动画活动。
PhilipS
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.