单击UIBarButtonItem后刷新视图

时间:2011-06-12 14:09:51

标签: iphone objective-c xcode uiview

我的导航栏上有一个刷新按钮

buttonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(buttonItemClicked)];
    self.navigationItem.rightBarButtonItem = buttonItem;
-(void)buttonItemClicked{
    NSLog(@"buttonItemclicked");
    myView.labelName.text = nil;
    myView.otherLabelName.text = nil;
    [spinner startAnimating]
    [spinnerView setHidden:NO];
    [self requestAPI];
    [spinner stopAnimating];
    [spinnerView setHidden:YES];
  }

如果我进出视图,它可以正常工作。但是当我在buttonItemClicked中调用相同的方法时,它不起作用。我也尝试在我的action方法中调用view方法,但这也不起作用。

我要做的是将我的标签设置为nil,添加UIActivityIndicatorView并在再次设置标签后将其删除。

我已经尝试过[self.view setNeedsDisplay];

刷新它自己工作,但动画不起作用。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

尝试[myView setsNeedToDisplay];

答案 1 :(得分:0)

动画无效,因为您在同一方法中调用startAnimating和stopAnimating(和setHidden)。 渲染从方法调用结束开始。 你需要设置

[spinner stopAnimating];
[spinnerView setHidden:YES];
requestAPI中的

修改

使用Grand Central Dispatch。像:

- (void)buttonItemClicked {
  myView.labelName.text = nil;
  myView.otherLabelName.text = nil;
  [spinner startAnimating]
  [spinnerView setHidden:NO];
  [self requestAPI];
}

- (void)requestAPI {
  dispatch_async(dispatch_get_global_queue(0, 0), ^{
    NSURL *url = [NSURL URLWithString:@"http://example.com"];
    NSData *data = [NSData dataWithContentsOfURL:url];
    NSString *stringResult = [[NSString alloc] initWithData:data
                                                   encoding:NSUTF8StringEncoding];
    dispatch_async(dispatch_get_main_queue(), ^{
      [spinner stopAnimating];
      [spinnerView setHidden:YES];

      myView.labelName.text = stringResult;
    });

  });
}