2014-12-18 69 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

接受的答案在斯威夫特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