与此问题类似:Adding subview, gets delayed? 但我不认为你可以将pushViewController放在一个单独的线程中,所以这真的不可能吗?
这是我正在尝试做的事情:
我有一个TableView,当按下一个单元格时,我想调用
[self.view addSubview:LoadingView]
显示带微调器的叠加层。然后我打电话给
self.navigationController.navigationBar.hidden = NO;
[self.navigationController pushViewController:newGameViewController animated:YES];
但是,子视图仅显示一瞬间(在等待新视图控制器初始化时发生单元格选择后约1-4秒)。
有没有办法在选择单元格的瞬间获得某种加载指示符?
答案 0 :(得分:1)
好。那这个呢。在你的didSelectRowAtIndexPath中启动你的微调器(通过addSubview ...)并开始从服务器加载你的东西。如果已完成删除微调器,则将新视图控制器推入堆栈。确保用户在此期间无法触摸任何其他单元格。顺便说说。从用户的角度来看,如果新控制器立即加载并显示一些等待消息,我会发现它很直观。
答案 1 :(得分:1)
或者相反:newGameViewController
显示微调器并开始在后台线程中从服务器加载数据。数据完成后,删除微调器并显示数据。这样,如果用户不想等待,用户甚至可以回去。
答案 2 :(得分:1)
在推送newGameViewController之前,您不需要添加代码。
在newGameViewController的viewDidLoad中,编写显示微调器的代码。要获取更新的UI,只需在调用Web API之前插入延迟。
在GameViewController.m中
-(void) viewDidLoad
{
[self.view addSubview:LoadingView];
[self performSelector:@selector(callWebAPI) afterDelay:0.1];
}
-(void) callWebAPI
{
//Handle network activity here..
}