在pushViewController之前不会显示添加子视图

时间:2012-08-12 16:14:08

标签: objective-c ios subview pushviewcontroller addsubview

与此问题类似:Adding subview, gets delayed? 但我不认为你可以将pushViewController放在一个单独的线程中,所以这真的不可能吗?

这是我正在尝试做的事情:

我有一个TableView,当按下一个单元格时,我想调用

[self.view addSubview:LoadingView]

显示带微调器的叠加层。然后我打电话给

self.navigationController.navigationBar.hidden = NO;
[self.navigationController pushViewController:newGameViewController animated:YES];

但是,子视图仅显示一瞬间(在等待新视图控制器初始化时发生单元格选择后约1-4秒)。

有没有办法在选择单元格的瞬间获得某种加载指示符?

3 个答案:

答案 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..
}