表格单击短暂延迟

时间:2012-04-20 11:22:30

标签: objective-c uiactivityindicatorview tablecell

当我点击表格单元格时,在加载下一个视图之前会有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秒,因此它甚至没有显示活动指示器。

1 个答案:

答案 0 :(得分:2)

我认为你应该使用performSelector方法调用load方法。另一个提示是隐藏或显示活动,因此不会消耗此操作的时间。

所以这可能是那个

的伪代码

在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];

}

希望它有所帮助。