我尝试使用主线程显示,但它没有工作,任何想法,为什么警报不显示了吗?
@IBAction func updateData(_ sender: Any) {
let alert = UIAlertController(title: "Updating data", message: "Please wait...", preferredStyle: .alert)
alert.view.tintColor = UIColor.black
let loadingIndicator: UIActivityIndicatorView = UIActivityIndicatorView(frame: CGRect(x: 10,y: 5,width: 50, height: 50)) as UIActivityIndicatorView
loadingIndicator.hidesWhenStopped = true
loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
loadingIndicator.startAnimating();
alert.view.addSubview(loadingIndicator)
DispatchQueue.main.async {
self.present(alert, animated: true)
}
4条答案
按热度按时间cclgggtu1#
UIAlertController
不能自定义,所以对我来说最好的解决方案是创建一个自定义的UIView XIB,然后在我需要的ViewController
上安装它。XIB视图可能如下所示:
然后创建一个CustomAlertLoadingView.swift文件,该文件的子类为
UIView
,将其与XIB关联并创建IBOutlets
。要在任何
ViewController
中显示它,只需创建此扩展使用
self.yourViewController.presentAlert(title:"yourTitle")
要解除警报,请在
UIVIewController
扩展内创建以下函数然后调用
self.yourViewController.dismissCustomAlert
hlswsv352#
我不得不将执行所需的代码放在警报完成回调中
})
解决了延迟响应问题
8ftvxx2r3#
我在Xcode上运行了这个代码,没有任何延迟:
我用
UIButton
替换了函数的sender
参数,并去掉了对主队列的Dispatch调用,因为这是不必要的。当你说有延迟时,你是指只有当你单步执行代码时才有延迟吗?因为是的,如果你单步执行代码,警报视图不会在
self.present(alert, animated: true)
之后立即显示。你必须等到函数完成执行。但是“延迟”是肉眼看不到的。你试过不单步执行代码就运行上面的代码吗?0s0u357o4#
调整警报视图约束以设置UIActivityIndicatorView。
结果: