我正在使用带有活动指示器的UIAlertView,但指示器位置不正确。我确信我错过了一些非常小的东西,但如果有人可以帮助我的话会很棒。以下是我的代码和相应的代码段
var progressAlert: UIAlertView = UIAlertView(title: "Downloading", message: "Patients information...", delegate: nil, cancelButtonTitle: nil);
var loadingIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
loadingIndicator.center = CGPointMake(progressAlert.bounds.size.width/2, progressAlert.bounds.size.height - 150)
loadingIndicator.hidesWhenStopped = true
loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
loadingIndicator.startAnimating()
progressAlert.setValue(loadingIndicator, forKey: "accessoryView")
progressAlert.show()
编辑:按照Matt的回答,最终创建自定义视图,它就像一个魅力。
答案 0 :(得分:1)
这里有两个问题。一个是您正在假设progressAlert
的最终大小 - 您根据progressAlert
框架现在的内容来定位活动指标,而不是基于它出现时将的内容。您可以通过使用约束而不是绝对center
值来解决这个问题。
然而,更大的问题是你所做的是非法的。不要将自己的子视图添加到UIAlertView。相反,使用您自己的视图制作您自己的视图控制器并呈现它。它可以看起来就像一个警报(即小,居中,调暗界面的其余部分),但现在它是你的视图,你可以做任何你喜欢的事情。
答案 1 :(得分:0)
import Foundation
import UIKit
class YourFunction{
//#MARK: - showAlertView With Activity indicator
class func showAlertViewWithIndicator(TitleMessage: String, timeInterval: Double,view: UIViewController){
let alert = UIAlertView()
alert.delegate = self
alert.title = TitleMessage
let loadingIndicator: UIActivityIndicatorView = UIActivityIndicatorView(frame: CGRectMake(50, 10, 37, 37)) as UIActivityIndicatorView
loadingIndicator.center = view.view.center
loadingIndicator.hidesWhenStopped = true
loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
loadingIndicator.startAnimating();
alert.setValue(loadingIndicator, forKey: "accessoryView")
loadingIndicator.startAnimating()
alert.show()
let delay = timeInterval * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue(), {
alert.dismissWithClickedButtonIndex(-1, animated: true)
loadingIndicator.stopAnimating()
loadingIndicator.hidesWhenStopped = true
view.dismissViewControllerAnimated(true, completion: nil)
})
}
}
我为你写了全局函数。这将显示带有标题和活动指示符的UIAlertView。您可以根据TimeInterval变量设置时间。您可以在viewcontroller中的任何位置调用它。只需输入YourFunction.showAlertViewWithIndicator(“Hello World”,timeInterval:3.0,self)
快速2倍 只是想帮忙:))