我希望我的UIViewController出现在屏幕上,中间有一个“Loading ...”UILabel,然后,一旦显示,就开始加载数据显示。
我怎样才能做到这一点?我尝试在viewDidAppear:中加载它,但此时视图仍然没有显示在屏幕上,因此应用程序似乎没有响应用户。如果我尝试设置一个短计时器(0.0001秒)以便显示视图,然后在运行循环中调用数据加载方法,由于某种原因,从打开视图控制器到看到内容所花费的时间是关于没有计时器的三倍。在这种情况下,出现Loading ...文本,但用户必须等待太长时间。
最好的方法是什么?
答案 0 :(得分:0)
最好在viewDidLoad
的线程中执行此操作,并在调用线程显示标签之前调用线程中的方法,并在通过线程加载数据时隐藏标签。
-(void)viewDidLoad{
[self showLabel];
[NSThread detachNewThreadSelector:@selector(loadData:) toTarget:self withObject:nil];
}
更新
- (void) loadData:(id)object{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//Network Operations
//...
//...
//...
//...
[self performSelectorOnMainThread:@selector(reloadView:) withObject:arg waitUntilDone:[NSThread isMainThread]];
[pool release];
}
希望这会有所帮助。 谢谢,
Madhup
答案 1 :(得分:0)
如果我没有误解你的目的,我认为你只想向用户播种'加载'状态,对吧?如果是这样,我建议你可以使用一个简单的ViewController来显示标签'Loading ...',然后创建你想要显示给用户的MainViw或下一个视图,当它完成时,隐藏第一个视图节目屏幕上的MainView ......