iOS Swift 3-Can';提交后不要停止UIActivityIndicator视图
我有一个提交按钮,可以通过iOS Swift 3-Can';提交后不要停止UIActivityIndicator视图,ios,cocoa-touch,swift3,grand-central-dispatch,Ios,Cocoa Touch,Swift3,Grand Central Dispatch,我有一个提交按钮,可以通过HTTP以JSON格式提交电子邮件和密码进行验证,但即使应用程序收到服务器的响应,指示器视图也不会停止 @IBAction func signInButtonAction(_ sender: UIButton) { let validated = validateEmailAddressTextField() if validated { let emailAddress = emailAddressTextField.text
HTTP
以JSON
格式提交电子邮件和密码进行验证,但即使应用程序收到服务器的响应,指示器视图也不会停止
@IBAction func signInButtonAction(_ sender: UIButton) {
let validated = validateEmailAddressTextField()
if validated {
let emailAddress = emailAddressTextField.text
let password = passwordField.text
let url:URL = URL(string: "http://localhost:8080/app/user/signin")!
let session = URLSession.shared
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.allHTTPHeaderFields = ["Content-Type": "application/json"]
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
let user = User(emailAddress: emailAddress!, password: password!)
let requestJSON = careGiver.toJSON()
request.httpBody = requestJSON?.data(using: String.Encoding.utf8)
let indicator = UIActivityIndicatorView(activityIndicatorStyle: .gray)
indicator.center = view.center
view.addSubview(indicator)
indicator.startAnimating()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.0) {
let task = session.dataTask(with: request as URLRequest) {
(
data, response, error) in
guard let data = data, let _:URLResponse = response, error == nil else {
print("error")
return
}
let dataString = String(data: data, encoding: String.Encoding.utf8)
print(dataString)
indicator.stopAnimating()
}
task.resume()
}
}
}
当我单击“提交”按钮时,我看到按钮顶部有一个指示器视图,但它不会停止并消失
代码有什么问题吗
我使用的是swift3
和Xcode 8
谢谢。
指示器。停止设置动画()
尝试在主线程上运行这行代码:
DispatchQueue.main.async {
indicator.stopAnimating()
}
DispatchQueue.main.async {
indicator.stopAnimating()
}
在随机线程上调用网络闭包,但UI代码只能在主线程中处理。因此,您只需在主线程中调用indicator.stopAnimating():
DispatchQueue.main.async {
indicator.stopAnimating()
}
DispatchQueue.main.async {
indicator.stopAnimating()
}
此外,我还将此块移到闭包的开始(在保护之前),以防止在响应出错时动画继续。谢谢。它起作用了。。为什么我需要在异步块内部调用?因为与UI交互的所有东西都必须在主线程上运行。