Обновить вид после нажатия UIBarButtonItem - PullRequest
1 голос
/ 12 июня 2011

У меня на панели навигации есть кнопка обновления

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, это не работает. Я также пытался вызвать методы представления внутри моего метода действия, но это тоже не работает.

То, что я пытаюсь сделать, это установить мои метки на ноль, добавить мой UIActivityIndicatorView и удалить его после того, как метки будут установлены снова.

Я уже попробовал [self.view setNeedsDisplay];

Обновление само по себе работает, но анимация не работает.

Есть предложения?

Ответы [ 2 ]

0 голосов
/ 12 июня 2011

Анимация не работает, потому что вы вызываете startAnimating и stopAnimating (и setHidden) в одном методе Визуализация начинается в конце вызова метода. Вам нужно установить

[spinner stopAnimating];
[spinnerView setHidden:YES];

в requestAPI.

Edit:

Использование 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;
    });

  });
}
0 голосов
/ 12 июня 2011

Попробуйте [myView setsNeedToDisplay];.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...