For quick 4 Create an alert controller extension
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) } }
Create a Var a ctivityIndicatorAlert in your view controller and write display and dismiss in the view controller as shown below
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 }
You can also add the UIViewcontroller extension to the globally accessible methods above.
extension UIViewController { private struct activityAlert { static var activityIndicatorAlert: UIAlertController? } //completion : ((Int, String) -> Void)?) 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 } }
source share