在 swift 3 中删除完成处理程序中的 UIActivityIndicator
Posted
技术标签:
【中文标题】在 swift 3 中删除完成处理程序中的 UIActivityIndicator【英文标题】:Removing UIActivityIndicator inside a completion handler in swift 3 【发布时间】:2017-06-16 07:21:26 【问题描述】:我想在完成我的块后删除我的活动指示器。所以我做了这样的事情。
func workflowSelected()
self.btnWorkflow.setTitle(dm.workflowName, for: .normal)
self.actIndApprover=UIActivityIndicatorView.init(frame: CGRect.init(x: self.btnFirstApprover.frame.size.width-40, y: 5, width: 30, height: 30))
self.actIndApprover.color=self.com.getfontColor()
self.actIndApprover.startAnimating()
self.btnFirstApprover.addSubview(self.actIndApprover)
self.callingFirstApprovers() (staus) in
self.actIndApprover.stopAnimating()
self.actIndApprover.removeFromSuperview()
self.actIndApplyLeave.stopAnimating()
self.actIndApplyLeave.removeFromSuperview()
self.btnFirstApprover.addTarget(self, action: #selector(self.approverClicked), for: .touchUpInside)
if(staus)
print("Approvers loaded")
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "approverSelected"), object: nil)
else
self.btnFirstApprover.setTitle(self.lan.getConvertedLanguageString(word: "First Approver"), for: .normal)
但是这个活动指示器永远不会删除。我需要在主线程上删除它吗?如果是这样,我该怎么做。请帮我。 谢谢
更新
func callingFirstApprovers(callback:@escaping(Bool)->Void)
let strBindedParam="workflowId=\(dm.workflowID!)&requesterCode=\(dm.strEmpCode!)&levelId=1"
let appendString=com.getServicePath(funcNAme: "workflow")
restAPI.prepareUrl(baseUrl:dm.tenantUrl,appendString: appendString, bindedParams: strBindedParam, isAuthorized: true, method: .get, jsonBody: [:]) (status) in
if(status=="success")
self.com.removeProgress()
print(self.dm.responseArray)
self.arrayApproversFullArray=self.dm.responseArray
if(self.dm.responseArray.count>0 && self.dm.responseArray != nil)
let obj=self.dm.responseArray[0] as! [String:Any]
print("object approver------\(obj)")
if let objApprover:Array<Any> = obj["Approvers"] as? Array<Any>
if(objApprover.count>0)
self.dm.arrayFirstApprovers=objApprover
let approverInnerObj=objApprover[0] as! [String:Any]
print(objApprover)
if let strApproverCode=approverInnerObj["EmployeeCode"] as? Int
self.dm.strApproverCode=String(strApproverCode)
if let strApproverNAme=approverInnerObj["Name"] as? String
self.btnFirstApprover.setTitle(strApproverNAme, for: .normal)
self.dm.strApproverNAme=strApproverNAme
print("Approvers are more than 1")
callback(true)
else
callback(false)
callback(false)
else
callback(false)
else
print(self.dm.errorMessage)
self.com.showAlertMessage()
callback(false)
【问题讨论】:
【参考方案1】:是的,必须在主线程上进行 GUI 更改。
DispatchQueue.main.async
self.actIndApprover.stopAnimating()
通常 Xcode 会在控制台输出中给出警告。
【讨论】:
我确实喜欢这个,似乎它多次调用。有什么理由吗? 这个调度块运行了多次 我不知道您的代码或电话。这不是 Dispatch 本身,而是你的实现被多次调用 我刚才想了想,当初始时,活动指示器正确消失了,但是当我单击相同的 btn 时,下次它不会出现 你添加了一些断点?然后你可以看到谁在调用你的完成以上是关于在 swift 3 中删除完成处理程序中的 UIActivityIndicator的主要内容,如果未能解决你的问题,请参考以下文章