仅在单击按钮后显示活动指示器

时间:2014-02-20 06:49:59

标签: ios uiview uibutton activity-indicator

嗨,我正在尝试通过单击按钮查看活动指示器。我试过但我遇到了一些问题。如果我将活动指示器拖到我的故事板但在运行我的应用程序时可见,我想在单击按钮时显示。在我的应用程序中,我正在给照片上传选项。因此,如果他们点击上传按钮,我想查看活动指标。 ..

这是我累了的代码,但它不起作用。

这是我的h文件,我已经实现了活动指示器和按钮..

- (IBAction)click:(id)sender;
 @property (strong, nonatomic) IBOutlet UIActivityIndicatorView *spinner;

这是我在m文件中使用的代码......

-(void)temp
{
 spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
 spinner.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
 [spinner setCenter:CGPointMake(480/2.0, 128.0/2)]; // (mid of screen) I do this because I'm in landscape mode
 [self.view addSubview:spinner];
 [spinner startAnimating];
 [spinner release];
}

我在我的按钮中调用此功能..

- (IBAction)click:(id)sender {
[self temp];
}

并且我还有一些其他问题,我看到代码here问题是

[yourView addSubview:spinner]; 

在你的视图中,我给出了我的uiviewcontroller名称,但是我给出了错误,我已经改为

[self.view addSubview:spinner];

请告诉我我在哪里做错了什么是正确的做法..谢谢

4 个答案:

答案 0 :(得分:1)

男人我遇到了问题......我认为你在白色视图上添加了白色活动指示器,这就是为什么它没有被显示但是肯定是这样......使用其他风格UIActivityIndicatorViewStyleGray

-(void)temp
{
 spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
 spinner.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
 [spinner setCenter:CGPointMake(480/2.0, 128.0/2)]; // (mid of screen) I do this because I'm in landscape mode
 [self.view addSubview:spinner];
 [spinner startAnimating];
 [spinner release];
}

答案 1 :(得分:0)

首先,因为你已经为微调器提供了一个IBOutlet所以不要在temp方法中分配一个新的。将temp方法修改为如下所示:

  -(void)temp
    {
      spinner.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
     [spinner setCenter:CGPointMake(480/2.0, 128.0/2)]; // (mid of screen) I do this because I'm in landscape mode
     [self.view addSubview:spinner];
     [spinner startAnimating];
    }

答案 2 :(得分:0)

假设您的微调器连接到您的视图。 在viewDidLoad您可以设置视图,然后点按按钮时会显示:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.spinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    self.spinner.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
    [self.spinner setCenter:CGPointMake(480/2.0, 128.0/2)]; // (mid of screen) I do this because I'm in landscape mode
    self.spinner.hidden = YES;
}

- (IBAction)click:(id)sender
{
    self.spinner.hidden = NO;
    [self.spinner startAnimating];

     // Additionally you can show spinner in top bar
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}

- (void)stopSpinner
{
    if (self.spinner.isAnimating) {
        self.spinner.hidden = YES;
        [self.spinner stopAnimating];

        // And hide it when you don't need it anymore
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
    }
}

我建议您看到这个答案:How to get orientation-dependent height and width of the screen?重新定位您的微调器。

答案 3 :(得分:0)

如果您正在使用界面构建器,例如 Storyboard XIB ,那么只需设置框架并将其自行设置。如果您想在运行时更改它的属性,只需使用您使用的 IBOutlet 。 您无需再次实例化,只需使用其getter和setter来相应地使用它。所以你可以这样做。

- (IBAction)click:(id)sender 
  {
    [self.spinner startAnimating];
  }

并在使用之前合成微调器

如果您想以编程方式使用它,请从XIB中删除它并删除与其对应的所有引用。并在.h文件中声明

UIActivityIndicatorView *spinner;

或者你可以制作一个属性

@property(nonatomic, strong)UIActivityIndicatorView *spinner;

并使用您自己的代码。