推送下一个视图时的活动指示符 - didSelectRowAtIndexPath

时间:2011-06-14 11:06:47

标签: iphone uitableview uiview spinner uiactivityindicatorview

我可以在我的iPhone应用中成功推送下一个视图。但是,导致下一个视图检索数据以填充UITableViews,有时等待时间可能是几秒或稍长,具体取决于连接。

在此期间,用户可能会认为该应用已冻结等。因此,为了解决此问题,我认为实施UIActivityIndicators将是让用户知道应用正常运行的好方法。

有人可以告诉我在哪里可以实现这个吗?

感谢。

pushDetailView方法

- (void)pushDetailView {

[tableView deselectRowAtIndexPath:indexPath animated:YES];
//load the clicked cell.
DetailsImageCell *cell = (DetailsImageCell *)[tableView cellForRowAtIndexPath:indexPath];

//init the controller.
AlertsDetailsView *controller = nil;
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){
    controller = [[AlertsDetailsView alloc] initWithNibName:@"DetailsView_iPad" bundle:nil];
} else {
    controller = [[AlertsDetailsView alloc] initWithNibName:@"DetailsView" bundle:nil];
}

//set the ID and call JSON in the controller.
[controller setID:[cell getID]];

//show the view.
[self.navigationController pushViewController:controller animated:YES];

1 个答案:

答案 0 :(得分:6)

您可以在didSelectRowAtIndexPath:方法本身实现此功能。

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleWhiteLarge];
cell.accessoryView = spinner;
[spinner startAnimating];
[spinner release];

这将显示单元格右侧的活动指示器,这将使用户感觉某些内容正在加载。

编辑:如果您设置 accessoryView 并使用相同的方法编写加载代码,则只有在完成所有操作后,UI才会更新。解决此问题的方法是在 didSelectRowAtIndexPath:方法中设置 activityIndi​​cator 并调用视图控制器推迟代码。

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

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleWhiteLarge];
    cell.accessoryView = spinner;
    [spinner startAnimating];
    [spinner release];

    [self performSelector:@selector(pushDetailView:) withObject:tableView afterDelay:0.1];
}

- (void)pushDetailView:(UITableView *)tableView {

    // Push the detail view here
}