在Swift中使用UIActivityIndicatorView和UIWebView
我试图在我的应用程序中向用户显示一个活动指示器视图,而URL正在加载到WebView中。我已经尝试过使用activity.startAnimating/activity.stopAnimating来尝试将它们放置在函数等中,但没有任何运气。在Swift中使用UIActivityIndicatorView和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")
}
首先尝试的,我没有看到一个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
我敢肯定,你想通了现在,但您需要连线您的UIWebView
以通过控制拖动将其委托人设置为您的故事板中的UIViewController
。
您需要像这样将UIWebViewDelegate添加到您的类中。
class HighchartsController: UIViewController, UIWebViewDelegate {
您还需要在viewDidLoad函数中将自己的webView委托分配给self,如下所示。
HighchartsView.delegate = self
而不是UIWEBViewDelegate它应该是UIWebViewDelegate – 2017-02-19 05:34:19
小疏忽。谢谢。 – Jackson 2017-04-12 16:17:03
以下是三个简单的步骤,我总是跟随在的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()
}
后外 '类HighchartsController:UIViewController的',并称UIWebViewDelegate,并在 'highchartsView.delegate =自我',并称,我该怎么办委托UIWebview?对不起,我是Swift和Xcode的新手。 – agwin27 2015-04-02 01:15:33
@ agwin27您需要将UIWebview的协议'UIWebViewDelegate'委托给您的类,并在订阅的协议中实现内部描述的函数 - UIWebViewDelegate。 – dimpiax 2016-12-16 12:53:28