向UIAlertView添加活动指示器

Sru*_*mha 9 uialertview uiactivityindicatorview swift

我想补充UIActivityIndicatorViewUIAlertView,但不能把它做.我看过这个实现的帖子,发现它只适用于iOS7以下的版本.

以下是我试过的代码......

var alert: UIAlertView = UIAlertView(title: "Title", message: "Please wait...", delegate: nil, cancelButtonTitle: "Cancel");

var loadingIndicator: UIActivityIndicatorView = UIActivityIndicatorView(frame: CGRectMake(0.0, 0.0, 10.0, 10.0)) as UIActivityIndicatorView
loadingIndicator.center = self.view.center;
loadingIndicator.hidesWhenStopped = true
loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
loadingIndicator.startAnimating();

alert.addSubview(loadingIndicator);  
alert.show();
Run Code Online (Sandbox Code Playgroud)

为了完成这项工作,iOS7及以上版本有什么具体的事情要做吗?

Bes*_*rov 28

试试这个代码!!

var alert: UIAlertView = UIAlertView(title: "Title", message: "Please wait...", delegate: nil, cancelButtonTitle: "Cancel")


var loadingIndicator: UIActivityIndicatorView = UIActivityIndicatorView(frame: CGRect(x: 50, y: 10, width: 37, height: 37)) as UIActivityIndicatorView
loadingIndicator.center = self.view.center
loadingIndicator.hidesWhenStopped = true
loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
loadingIndicator.startAnimating();

alert.setValue(loadingIndicator, forKey: "accessoryView")
loadingIndicator.startAnimating()

alert.show();
Run Code Online (Sandbox Code Playgroud)

我希望我帮助过你

  • 一个非常简短、非常好的解决方案,不建议使用 Pod。你应该在天堂拥有一个特殊的位置。 (2认同)

Pak*_*ung 5

快速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)
    }
}
Run Code Online (Sandbox Code Playgroud)

在视图控制器中创建Var一个ctivityIndicatorAlert,然后在视图控制器中编写displaydismiss方法,如下所示

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
}
Run Code Online (Sandbox Code Playgroud)

您还UIViewcontroller可以在所有方法之上添加扩展名For全局可用。

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
    }
}
Run Code Online (Sandbox Code Playgroud)