2014-12-18 2 views
5

Я пытаюсь добавить UIActivityIndicatorView в UIAlertView, но не смог сделать это. Я видел сообщения об этой реализации и выяснил, что он работает только для версий ниже iOS7.Добавление индикатора активности в UIAlertView

Ниже приведен код, я пытался ...

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(); 

Есть ли что-либо конкретное, что нужно сделать для iOS7 и выше, чтобы это было сделано?

+2

Вы также можете быть заинтересованы в этом классе: https://github.com/goktugyil/CozyLoadingActivity – Esqarrouth

ответ

23

попробуйте этот код !!

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


     var loadingIndicator: UIActivityIndicatorView = UIActivityIndicatorView(frame: CGRectMake(50, 10, 37, 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(); 

Я надеюсь, что я помог вам

+0

Отлично! Благодарю. –

+0

Всегда рад помочь –

+0

очень короткое, очень хорошее решение, не рекомендуя использовать стручок. вы заслуживаете особого места на небесах. –

0

Для тех, кто использует Objective-C. Мое решение обертывает UIActivityIndicatorView с большим обзором, поэтому маржа к краю UIAlertView не так мала.

#import "UIAlertView+ActivityIndicator.h" 

@implementation UIAlertView (ActivityIndicator) 

+ (UIAlertView *)alertViewWithActivityIndicator:(NSString *)title delegate:(id<UIAlertViewDelegate>)delegate; 
{ 
    UIAlertView *a = [[UIAlertView alloc] initWithTitle:title 
               message:nil 
               delegate:delegate 
             cancelButtonTitle:nil 
             otherButtonTitles:nil]; 

    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)]; 
    UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
    aiv.translatesAutoresizingMaskIntoConstraints = NO; 
    [v addSubview:aiv]; 
    [v addConstraint:[NSLayoutConstraint constraintWithItem:aiv 
                attribute:NSLayoutAttributeCenterX 
                relatedBy:NSLayoutRelationEqual 
                toItem:v 
                attribute:NSLayoutAttributeCenterX 
               multiplier:1.0 
                constant:0]]; 
    [v addConstraint:[NSLayoutConstraint constraintWithItem:aiv 
                attribute:NSLayoutAttributeCenterY 
                relatedBy:NSLayoutRelationEqual 
                toItem:v 
                attribute:NSLayoutAttributeCenterY 
               multiplier:1.0 
                constant:0]]; 
    [aiv startAnimating]; 
    [a setValue:v forKey:@"accessoryView"]; 

    return a; 
} 

@end 
1

Принятый ответ в Swift 3:

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


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

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

    alert.show(); 
+1

UIAlertView устарел в iOS 9.0 – cmii

Смежные вопросы