我今天晚上一直在玩网页浏览,但遇到了一些问题。
出于某种原因,我无法触发webViewDidStartLoad或webViewDidFinishLoad方法。 在我的故事板中,我有一个名为webView的插座,链接到我的UIWebView元素。
有人能帮我解决我做错的事吗?
这是我的viewController.swift文件:
import UIKit
class ViewController: UIViewController, UIWebViewDelegate {
@IBOutlet var webView : UIWebView
var url = NSURL(string: "http://google.com")
override func viewDidLoad() {
super.viewDidLoad()
//load initial URL
var req = NSURLRequest(URL : url)
webView.loadRequest(req)
}
func webViewDidStartLoad(webView : UIWebView) {
//UIApplication.sharedApplication().networkActivityIndicatorVisible = true
println("AA")
}
func webViewDidFinishLoad(webView : UIWebView) {
//UIApplication.sharedApplication().networkActivityIndicatorVisible = false
println("BB")
}
}
答案 0 :(得分:20)
试试这个!
var req = NSURLRequest(URL: url)
webView.delegate = self
webView.loadRequest(req)
答案 1 :(得分:2)
我遇到了同样的问题,即使我确认了自己的UIWebViewDelete并实现了它的方法。
//Document file url
var docUrl = NSURL(string: "https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwjjwPSnoKfNAhXFRo8KHf6ACGYQFggbMAA&url=http%3A%2F%2Fwww.snee.com%2Fxml%2Fxslt%2Fsample.doc&usg=AFQjCNGG4FxPqcT8RXiIRHcLTu0yYDErdQ&sig2=ejeAlBgIZG5B6W-tS1VrQA&bvm=bv.124272578,d.c2I&cad=rja")
let req = NSURLRequest(URL: docUrl!)
webView.delegate = self
//here is the sole part
webView.scalesPageToFit = true
webView.contentMode = .ScaleAspectFit
webView.loadRequest(req)
以上逻辑与我从快速谷歌搜索获得的测试URl完美配合。
但是当我替换我的时候。 webViewDidFinishLoad永远不会被调用。
然后我们如何解决?
在支持方面,我们必须在标头中定义内容类型作为文档。它就像魅力一样。
因此,请确保您的服务器后端也是如此。
答案 2 :(得分:1)
正如其他人所说,设置UIWebView
的委托并符合UIWebViewDelegate
协议是最好的解决方案。
答案 3 :(得分:1)
对于其他人可能会在这里。我已将我的委托方法放在委托调用者无法访问的private extension
中。一旦我将扩展名更改为internal
,代表就开始被正确调用。
答案 4 :(得分:1)
这是我在 SWIFT 3 中遇到同样问题的2美分:
public void show(View view) throws UnknownHostException {
WifiManager wm =
(WifiManager)getSystemService(Context.WIFI_SERVICE);
if (!wm.isWifiEnabled()) {
wm.setWifiEnabled(true);
}
int ip = wm.getConnectionInfo().getIpAddress();
String s = Integer.toString(ip);
EditText et = (EditText) findViewById(R.id.my_name);
et.setText("" + ip);
}
以这种方式声明委托方法(注意参数的声明):
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
at android.view.View.performClick(View.java:5207)
at android.view.View$PerformClick.run(View.java:21177)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
... 9 more
Caused by: java.lang.SecurityException: WifiService: Neither user 10170 nor current process has android.permission.ACCESS_WIFI_STATE.
at android.os.Parcel.readException(Parcel.java:1620)
at android.os.Parcel.readException(Parcel.java:1573)
at android.net.wifi.IWifiManager$Stub$Proxy.getConnectionInfo(IWifiManager.java:1125)
at android.net.wifi.WifiManager.getConnectionInfo(WifiManager.java:1315)
at com.example.shankey.chatoz.MainActivity.show(MainActivity.java:28)
... 11 more
请记住在 Interface Builder 中将self设置为webview的委托属性(选择webview,从Connections Inspector或从以编程方式从委托出口拖动到webview: self.webview.delegate = self)
答案 5 :(得分:1)
有我对Swift 3的详细解决方案:
类声明中的1)写下 UIWebViewDelegate 。例如:
类MyViewController:UIViewController, UIWebViewDelegate {
2)当然在storyboard中链接到你的UIViewController,如下所示: @IBOutlet weak var webView:UIWebView!
在func viewDidLoad中添加一行3): self.webView.delegate = self
没有更多。特别想到LinusGeffarth和LLIAJLbHOu的想法。