iPhone - 在选中的UITableViewCell上推送新的ViewController之前更新当前视图

时间:2011-04-01 14:00:10

标签: iphone objective-c cocoa-touch uiviewcontroller

我有一个UITableView项目列表。在选择项目时,我将导航到一个新视图,该视图使用以下内容显示所选项目的详细信息:

DetailsVC *detailsView = [[DetailsVC alloc] initWithNibName:@"DetailsVC" bundle:nil];
[self.navigationController pushViewController:detailsView animated:YES];

现在,详细信息视图是从远程位置获取数据,因此在连接速度较慢时可能需要几秒钟。我想要做的是在选择的行上显示一个活动指示器。

问题是添加的指示符的显示会延迟,直到下一个视图准备好导航到为止,这使得指标无法使用。

我试图在这两个具有相同效果的事件中添加此指标:

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

在导航发生之前,有没有办法在选择时添加指标(或更一般,修改UITableViewCell的内容)。

作为一项实验,我还尝试在同样的两个事件中弹出警报视图,导致在导航到详细信息视图后弹出警报。

3 个答案:

答案 0 :(得分:0)

您可以在某个功能中拨打cell = [self rowForIndexPath:indexPath]。然后将指标添加到单元格子视图

答案 1 :(得分:0)

你可以

  1. 当您选择行时添加指示符并在数据到达时推送新视图 (同时删除指标)或
  2. 推送新视图,调用Web服务以获取相应的单元格数据(in viewDidLoad或viewWillAppear)并同时显示指示符 当新数据出现时删除指标

答案 2 :(得分:0)

所以它是[[DetailsVC alloc] init...]需要几秒钟,对吗?这个问题是你所做的任何视图更改都不会完全生效,直到一直返回到runloop,所以即使你在创建对象之前设置了指标,它也在等待init完成以使自己可见。您需要做的是推迟创建DetailsVC,直到设置指标为止。

我可能是一个更简单的改变使用块,但我不记得我头顶的细节(没有使用块很多,因为我最近写的代码必须保持兼容3 。X)。但是使用performSelector也很容易,请在问题中首先引用这两行并将它们放入自己的方法中,例如:

- (void)pushDetailsView {
  DetailsVC *detailsView = [[DetailsVC alloc] initWithNibName:@"DetailsVC" bundle:nil];
  [self.navigationController pushViewController:detailsView animated:YES];
}

如果您之前有这些线路,请设置您的指示灯,然后执行此操作(延迟0并不意味着立即调用它,而是在从当前调用堆栈返回后完全ASAP):

[self performSelector:@selector(pushDetailsView) withObject:nil withDelay:0]