对于 Swift 4
创建一个警告控制器扩展
extension UIAlertController {
private struct ActivityIndicatorData {
static var activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 40, height: 40))
}
func addActivityIndicator() {
let vc = UIViewController()
vc.preferredContentSize = CGSize(width: 40,height: 40)
ActivityIndicatorData.activityIndicator.color = UIColor.blue
ActivityIndicatorData.activityIndicator.startAnimating()
vc.view.addSubview(ActivityIndicatorData.activityIndicator)
self.setValue(vc, forKey: "contentViewController")
}
func dismissActivityIndicator() {
ActivityIndicatorData.activityIndicator.stopAnimating()
self.dismiss(animated: false)
}
}
在您的视图控制器中创建一个名为
ctivityIndicatorAlert
的
Var
,并像以下示例代码一样编写
display
和
dismiss
方法。
var activityIndicatorAlert: UIAlertController?
func displayActivityIndicatorAlert() {
activityIndicatorAlert = UIAlertController(title: NSLocalizedString("Loading", comment: ""), message: NSLocalizedString("PleaseWait", comment: "") + "...", preferredStyle: UIAlertController.Style.alert)
activityIndicatorAlert!.addActivityIndicator()
var topController:UIViewController = UIApplication.shared.keyWindow!.rootViewController!
while ((topController.presentedViewController) != nil) {
topController = topController.presentedViewController!
}
topController.present(activityIndicatorAlert!, animated:true, completion:nil)
}
func dismissActivityIndicatorAlert() {
activityIndicatorAlert!.dismissActivityIndicator()
activityIndicatorAlert = nil
}
你也可以添加
UIViewcontroller
的扩展,使其在全局上可用于所有方法。
extension UIViewController {
private struct activityAlert {
static var activityIndicatorAlert: UIAlertController?
}
func displayIPActivityAlert(_ onCancel : (()-> Void)?) {
activityAlert.activityIndicatorAlert = UIAlertController(title: NSLocalizedString("Loading...", comment: ""), message: nil , preferredStyle: UIAlertController.Style.alert)
activityAlert.activityIndicatorAlert!.addActivityIndicator()
var topController:UIViewController = UIApplication.shared.keyWindow!.rootViewController!
while ((topController.presentedViewController) != nil) {
topController = topController.presentedViewController!
}
activityAlert.activityIndicatorAlert!.addAction(UIAlertAction.init(title:NSLocalizedString("Cancel", comment: ""), style: .default, handler: { (UIAlertAction) in
self.dismissIPActivityAlert()
onCancel?()
}))
topController.present(activityAlert.activityIndicatorAlert!, animated:true, completion:nil)
}
func dismissIPActivityAlert() {
activityAlert.activityIndicatorAlert!.dismissActivityIndicator()
activityAlert.activityIndicatorAlert = nil
}
}