在Swift中使用UIActivityIndi​​catorView和UIWebView

agw*_*n27 12 progress uiwebview uiactivityindicatorview swift

我正在尝试在将URL添加到WebView时在我的应用程序中向用户显示活动指示器视图.我尝试过使用activity.startAnimating/activity.stopAnimating并尝试将它们放在函数等中,但没有任何运气.

我能够获得的最好的是活动指示器显示和动画,但是一旦我的网址被加载就不会停止动画或隐藏,所以它继续在网页顶部旋转.

在其他情况下,当试图移动activity.startAnimating时,我遇到了"线程1:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)"问题.我在属性检查器中检查了"在停止时隐藏",我知道我的URL是有效的,并且我已经为Interface Builder Elements创建了IBOutlets.

忍受我; 我对Swift比较陌生.这是我的代码:

class HighchartsController: UIViewController {

@IBOutlet weak var HighchartsView: UIWebView!

@IBOutlet weak var activity: UIActivityIndicatorView!

@IBOutlet weak var saveButton: UIBarButtonItem!

@IBOutlet weak var highchartsMenu: UIBarButtonItem!

override func viewDidLoad()
{
    super.viewDidLoad()

    if self.revealViewController() != nil {
        highchartsMenu.target = self.revealViewController()
        highchartsMenu.action = "revealToggle:"

        loadAddress()
    }
 }

func loadAddress() {

    let url = NSURL (string: "http://google.com/flights")
    let request = NSURLRequest (URL: url!)
    HighchartsView.loadRequest(request)
    println("Webpage Loaded Successfully")
 }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过使用不同的功能,比如

webViewDidStartLoad(_ :UIWebView){

    activity.startAnimating()
    NSLog("Webview load has started")

}
webViewDidFinishLoad(_ :UIWebView){

    activity.stopAnimating()
    NSLog("Webview load had finished")

}
Run Code Online (Sandbox Code Playgroud)

dim*_*iax 28

首先,我没有看到UIWebView的委托.实现与委派流程相关的行为.

UIWebViewDelegate有四种方法,但这种方式只使用三种:

斯威夫特4

func webViewDidStartLoad(_ webView: UIWebView) // show indicator    
func webViewDidFinishLoad(_ webView: UIWebView) // hide indicator
func webView(_ webView: UIWebView, didFailLoadWithError error: Error) // hide indicator
Run Code Online (Sandbox Code Playgroud)

斯威夫特3

func webViewDidStartLoad(webView: UIWebView!) // show indicator
func webViewDidFinishLoad(webView: UIWebView!) // hide indicator
func webView(webView: UIWebView!, didFailLoadWithError error: NSError!) // hide indicator
Run Code Online (Sandbox Code Playgroud)


Par*_*ion 8

*WKWebView 相当于dimpiax 答案。使用 WKNavigationDelegate

func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) // show indicator 

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)  // hide indicator 

func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error)  // hide indicator*  
Run Code Online (Sandbox Code Playgroud)