1

テーブルセルをクリックすると、次のビューが読み込まれるまでに1〜2秒の短い遅延があります。その間にアクティビティインジケーターを表示するアプリを見たことがありますが、それを実行したいと思います。このようなものを追加しました

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

  UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
  spinner.frame = CGRectMake(200,200,200,200);
  UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
  cell.accessoryView = spinner;
  [spinner startAnimating];
  [spinner release];

  VenueViewController *vviewcontroller = [[VenueViewController alloc] initWithNibName:@"VenueViewController" bundle:[NSBundle mainBundle]];

  [self.navigationController pushViewController:vviewcontroller animated:YES];
  [vviewcontroller release];
  vviewcontroller = nil;}

ただし、これも遅れて表示され、次のビューが表示される直前に表示されます。テーブルセルをクリックした後、アプリが1〜2秒間フリーズするため、アクティビティインジケーターも表示されないようです。

4

1 に答える 1

2

その秘訣は、performSelectorメソッドを使用してloadメソッドを呼び出す必要があることだと思います。もう1つのヒントは、この操作に時間を費やさないように、アクティビティを非表示または表示することです。

したがって、これはその擬似コードである可能性があります

ViewControllerクラス定義内:

IBOutlet UIActivityIndicatorView *spin;  // created in view and hidden

あなたの実装では...

-(void) load{ // your code
  VenueViewController *vviewcontroller = [[VenueViewController alloc] initWithNibName:@"VenueViewController" bundle:[NSBundle mainBundle]];

  [self.navigationController pushViewController:vviewcontroller animated:YES];
  [vviewcontroller release];
  vviewcontroller = nil;

  spin.hidden=YES;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

  spinner.hidden=NO;

  [self performSelector:@selector(load) withObject:nil afterDelay:0];

}

それが役に立てば幸い。

于 2012-04-21T14:09:15.163 に答える