所有视图控制器的通用UIAcitivityIndi​​cator

时间:2013-02-18 11:21:54

标签: iphone objective-c xcode uiactivityindicatorview

我的应用程序中有多个视图控制器。

从服务器下载数据时,我可以启动UIActivityIndicatorView

但问题是三个不同的视图控制器我需要创建三个不同的UIActivityIndicatorView

我想在某个地方初始化UIActivityIndicatorView一次,这样我就可以显示或隐藏它。无需像视图控制器那样创建或初始化UIActivityIndicatorView

我该怎么做?任何帮助。

4 个答案:

答案 0 :(得分:1)

在appdelgate的窗口中添加加载指示器,如下所示

首先初始化您的加载视图

-(void)InitializeLoadingIndictor
 {
   loadingView = [[UIImageView alloc]initWithFrame:CGRectMake(300, 400, 150, 150)];
   [loadingView setBackgroundColor:[UIColor blackColor]];
   [loadingView setAlpha:0.6];
    [loadingView setHidden:YES];
   [loadingView.layer setCornerRadius:10];
    [_window addSubview:loadingView];
   loadingIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
   [loadingIndicator setFrame:CGRectMake(50, 50, 50, 50)];

  [loadingView addSubview:loadingIndicator];
}

然后创建两个方法,两个隐藏并显示它

+ (void)showLoading
 {
  [loadingView setHidden:NO];
  [loadingIndicator startAnimating];
 }

隐藏

+ (void)hideLoading
 {
  [loadingView setHidden:YES];
 }

然后在视图控制器中,将其命名为

    [AppDelegate showLoading];

并在完成后隐藏它

    [AppDelegate hideLoading];

答案 1 :(得分:0)

您可以使用自定义UIAlertView显示指标。 我已经制作了两个自定义文件,您可以使用这些文件显示指示符而不会一次又一次地初始化它。

文件是: //头文件..

#import <UIKit/UIKit.h>

@interface ProgressIndicator : UIAlertView
{
    UIActivityIndicatorView *activityIndicator;
}

@end

//实施文件

#import "ProgressIndicator.h"

@implementation ProgressIndicator

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        activityIndicator=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
        // Initialization code
    }
    return self;
}


// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    [self addSubview:activityIndicator];
    [activityIndicator startAnimating];
    // Drawing code
}

@end

//在你的控制器中使用这个文件..

#import "ProgressIndicator.h"

ProgressIndicator *progressIndicator=[[ProgressIndicator alloc] initWithTitle:@"Loading" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
[progressIndicator show];

答案 2 :(得分:0)

请参阅此https://github.com/jdg/MBProgressHUD链接。您将获得所有视图的自定义活动指示器。

答案 3 :(得分:0)

谢谢大家的答案。下面的代码适用于我。

AppDelegate.m

-(void)StartLoading
{
    loader = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    loader.frame = CGRectMake(50, 14, 20, 20);
    [loader startAnimating];
    [self.window addSubview:loader];
    [self.window bringSubviewToFront:loader];
}

-(void)EndLoading
{
    for(UIView *subview in [self.window subviews])
    {
       if(subview==loader)
         [subview removeFromSuperview];
    }
}