Почему я не могу добавить загрузочный счетчик, когда нажимаю на ячейку таблицы? - PullRequest
1 голос
/ 06 марта 2012

Вот исходный код:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  [self loadingWithBackground]; //this view called the spinner

  return indexPath;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  [tableView deselectRowAtIndexPath:indexPath animated:YES];

  [self performSelectorOnMainThread:@selector(performIndexPath:) 
                         withObject:indexPath 
                      waitUntilDone:YES];
}

-(void)performIndexPath:(NSIndexPath *)aIndexPath{

//application logic, flip the view over, and display the data
}

Но это работает совершенно правильно:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
          [tableView deselectRowAtIndexPath:indexPath animated:YES];
          [self loadingWithBackground];
          return;

        //bababbaa
}

код загрузки с фоном:

-(void)loadingWithBackground{
  [self performSelectorOnMainThread:@selector(performLoadingWithBackground) 
                         withObject:NULL
                      waitUntilDone:YES];

  [m_oUIActivityIndicatorView startAnimating];
}
-(void)performLoadingWithBackground{
  self.m_isLoadFinished = NO;

  if(m_oUIActivityIndicatorView != NULL){
    [m_oUIActivityIndicatorView removeFromSuperview];
    m_oUIActivityIndicatorView = NULL;
  }

  if(m_oUIActivityIndicatorBackgroundView != NULL){
    [m_oUIActivityIndicatorBackgroundView removeFromSuperview];
    m_oUIActivityIndicatorBackgroundView = NULL;
  }

  m_oUIActivityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
  [m_oUIActivityIndicatorView setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhiteLarge];
  m_oUIActivityIndicatorBackgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, m_oUIActivityIndicatorView.frame.size.width, m_oUIActivityIndicatorView.frame.size.height)];
  [m_oUIActivityIndicatorBackgroundView setBackgroundColor:[UIColor grayColor]]; //I love the black one
  [m_oUIActivityIndicatorBackgroundView setAlpha:0.8];
  [m_oUIActivityIndicatorBackgroundView setCenter:CGPointMake(self.view.frame.size.width/2.0, self.view.frame.size.height/2.0)];
  m_oUIActivityIndicatorBackgroundView.layer.cornerRadius = 10;
  [m_oUIActivityIndicatorBackgroundView addSubview:m_oUIActivityIndicatorView];
  m_oUIActivityIndicatorView.hidden = NO;
  [self.view addSubview:m_oUIActivityIndicatorBackgroundView]; 
}

Я попытался выполнить загрузку с помощью основного потока, но он также не может отображаться. Когда я копирую метод: loadingWithBackground в didSelectRowAtIndexPath, он не показывает ни loadingWithBackground. Как мне этого добиться? Благодарю.

Ответы [ 2 ]

4 голосов
/ 06 марта 2012
NSInteger SelectedIndex;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  SelectedIndex = indexPath.row;
  // Start animating activity indicator
  [self performSelectorOnMainThread:@selector(performIndexPath) withObject:nil waitUntilDone:NO];
  // OR USING TIMER 
  // timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(performIndexPath) userInfo:nil repeats:NO];
}

-(void)performIndexPath {
  //stop activity indicator
}
0 голосов
/ 06 марта 2012

Я бы попробовал пару вещей:

  • Переместите [m_oUIActivityIndicatorView startAnimating]; в конец метода performLoadingWithBackground и вызовите этот метод вместо loadingWithBackground. Кажется, почти то же самое.

  • Добавить [self.view bringSubviewToFront:m_oUIActivityIndicatorBackgroundView]; после [self.view addSubview:m_oUIActivityIndicatorBackgroundView];. Не уверен, что это поможет, но я всегда делаю это

  • Debugging

Надеюсь, это поможет

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