我有一个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
的内容)。
作为一项实验,我还尝试在同样的两个事件中弹出警报视图,导致在导航到详细信息视图后弹出警报。
答案 0 :(得分:0)
您可以在某个功能中拨打cell = [self rowForIndexPath:indexPath]
。然后将指标添加到单元格子视图
答案 1 :(得分:0)
你可以
答案 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]