2015-04-01 49 views
7

我试图在我的应用程序中向用户显示一个活动指示器视图,而URL正在加载到WebView中。我已经尝试过使用activity.startAnimating/activity.stopAnimating来尝试将它们放置在函数等中,但没有任何运气。在Swift中使用UIActivityIndi​​catorView和UIWebView

我已经能够获得的最好的活动指示器出现和动画,但是不会停止动画或隐藏一旦我的url被加载,所以它继续旋转在网页上。

在其他情况下,当试图在activity.startAnimating中移动时,遇到了“线程1:EXC_BAD_INSTRUCTION(code = EXC_I386_INVOP,subcode = 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") 
} 
} 

而且我一直在使用不同的功能,如

webViewDidStartLoad(_ :UIWebView){ 

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

} 
webViewDidFinishLoad(_ :UIWebView){ 

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

} 

回答

16

首先尝试的,我没有看到一个UIWebView的代表团。 实现与授权过程相关的行为。

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

斯威夫特4

func webViewDidStartLoad(_ webView: UIWebView) // show indicator  
func webViewDidFinishLoad(_ webView: UIWebView) // hide indicator 
func webView(_ webView: UIWebView, didFailLoadWithError error: Error) // hide indicator 

斯威夫特3

func webViewDidStartLoad(webView: UIWebView!) // show indicator 
func webViewDidFinishLoad(webView: UIWebView!) // hide indicator 
func webView(webView: UIWebView!, didFailLoadWithError error: NSError!) // hide indicator 
+0

后外 '类HighchartsController:UIViewController的',并称UIWebViewDelegate,并在 'highchartsView.delegate =自我',并称,我该怎么办委托UIWebview?对不起,我是Swift和Xcode的新手。 – agwin27 2015-04-02 01:15:33

+0

@ agwin27您需要将UIWebview的协议'UIWebViewDelegate'委托给您的类,并在订阅的协议中实现内部描述的函数 - UIWebViewDelegate。 – dimpiax 2016-12-16 12:53:28

3

我敢肯定,你想通了现在,但您需要连线您的UIWebView以通过控制拖动将其委托人设置为您的故事板中的UIViewController

3

您需要像这样将UIWebViewDelegate添加到您的类中。

class HighchartsController: UIViewController, UIWebViewDelegate { 

您还需要在viewDidLoad函数中将自己的webView委托分配给self,如下所示。

HighchartsView.delegate = self 
+0

而不是UIWEBViewDelegate它应该是UIWebViewDelegate – 2017-02-19 05:34:19

+0

小疏忽。谢谢。 – Jackson 2017-04-12 16:17:03

2

以下是三个简单的步骤,我总是跟随在的Xcode 8 /夫特3/10的iOS为了实现UIWebView页面加载指示符:

步骤1.创建所述出口Web视图和负载指示器在ViewController类中。例如:

@IBOutlet var loadSpinner: UIActivityIndicatorView! 
@IBOutlet weak var webView: UIWebView! 

这两条线应该有非空点到他们的左边。

第2步。在故事板:控制 - 将WebView拖动到ViewController并从菜单中选择“委托”。正如GarySabo正确指出的那样,没有这一步,指标就会出现,但不会奏效!

第3步:下面的代码添加到您的ViewController类:

func webViewDidStartLoad(_ : UIWebView) { 
    loadSpinner.startAnimating() 
} 

func webViewDidFinishLoad(_ : UIWebView) { 
    loadSpinner.stopAnimating() 
} 
相关问题