【发布时间】:2017-01-18 13:55:17
【问题描述】:
我将UIAlertController 编程为加载屏幕
let waitActivityAlert = UIAlertController(title: nil, message: "Please wait...\n", preferredStyle: .alert)
let spinner = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
func letsspin(){
spinner.translatesAutoresizingMaskIntoConstraints = false
waitActivityAlert.view.addSubview(spinner)
let xConstraint = NSLayoutConstraint(item: spinner, attribute: .centerX, relatedBy: .equal, toItem: waitActivityAlert.view, attribute: .centerX, multiplier: 1, constant: 0)
let yConstraint = NSLayoutConstraint(item: spinner, attribute: .centerY, relatedBy: .equal, toItem: waitActivityAlert.view, attribute: .centerY, multiplier: 1.4, constant: 0)
NSLayoutConstraint.activate([ xConstraint, yConstraint])
spinner.isUserInteractionEnabled = false
spinner.color = UIColor.black
spinner.startAnimating()
let height: NSLayoutConstraint = NSLayoutConstraint(item: waitActivityAlert.view, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 100)
waitActivityAlert.view.addConstraints([height])
present(waitActivityAlert, animated: true)
}
我正在后台加载一个 TableViewController。当我的UITableView 正在加载单元格时,我将使用以下函数关闭此UIAlertController:
func letsstopspin(){
spinner.stopAnimating()
self.waitActivityAlert.dismiss(animated: true, completion: nil)
}
UIAlertController 没有关闭,我在控制台中收到此消息:
尝试在视图控制器中关闭 正在进行演示或解散
所以我不知道如何解决这个问题。在tableView() 方法之后有没有可以调用的方法?
我尝试了所有方法,但 UIAlertController 不会拒绝我尝试的任何方法。
【问题讨论】:
-
你是从后台线程调用letsstopspin()吗?您应该对主线程进行所有 UI 调用
-
是的,我在 TableView 填充单元格之前使用的函数末尾调用letsstopspin()
-
如果您从后台线程进行调用,则在后台线程完成之前不会调用它。您需要将其包装在对主队列的调度中
-
你能告诉我一个例子吗?我的主队列(viewDidLoad())在letspin()方法之后调用启动tableView的函数,所以在tableView充满数据后,我的函数完成了。我在编程世界中很新,所以我不知道如何将letsstopspin()包装在那里。如果我在最后包装它,它根本不会开始。
-
看看我发布的答案 - 如果您在任何时候调用 self.stopActivityIndicator(),指标应该立即停止。
标签: ios iphone swift uitableview uialertcontroller