xcode视图控制器隐藏字段不起作用



我有一个带有标签、文本字段、活动指示器和按钮控件的视图控制器,所有这些都与IBOutlets绑定,可以从我的代码中访问。

当用户按下按钮时,我会隐藏一些字段,并显示活动指示器。然后,我进行一个同步URL调用来获取一些JSON数据。

直到同步请求返回之后,视图控制器才会更新以反映活动指示符和隐藏字段。我需要在请求返回之前进行此操作,以便用户看到正在发生的事情。

我试着投了一个usleep(200000);,还尝试了[self.view setNeedsDisplay];--两者都无济于事。

有什么方法可以在阻止同步调用之前强制屏幕更新吗?我知道我可以进行异步调用,但我真的不想这样做,因为除非我得到我需要的数据,否则我不能在应用程序中做任何事情。。。

谢谢,Jerry

这是我用来发送同步请求的代码:这是例程"SendGetEventsRequest"的相关部分。

NSURLResponse *response = nil;
NSError *error = nil;
[self.aiActivityIndicator startAnimating];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

以下是我在调用上述例程之前使用的其他例程:

- (IBAction)btnGetEvents:(id)sender {
// The user presssed the GetEvents button. Send the requested server to be processed.
[self.aiActivityIndicator startAnimating];
[self.lblCollectingEventNames setHidden:NO];
[self.lblEnterServerName setHidden:YES];
[self.btnGetEvents setHidden:YES];
[self.tfServerName setHidden:YES];
[self.view setNeedsDisplay];
[self SendGetEventsRequest:self.tfServerName.text];
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[self.tfServerName resignFirstResponder];
[self btnGetEvents:self];
return YES;
}

基本上,当用户按下键盘上的"go"按钮时,会调用例程textFieldShouldReturn。我关掉键盘,然后模拟按下"获取事件"按钮。

在btnGetEvents中,我启动活动指示器,隐藏/显示一些字段,然后调用sendGetEventsRequest。里面有我进行同步调用的代码。

我在同步调用之前设置活动指示器和显示/隐藏字段,但它们直到同步调用返回之后才会更新。我相信这是因为视图控制器在执行Sync调用之前没有执行屏幕重绘。

所以,我需要弄清楚如何在同步调用之前更新屏幕。我希望额外的代码和解释会有所帮助。

哇,我简直不敢相信我是唯一一个有这个问题的人。我修改了我的代码以使用异步调用,它运行得很好。

最新更新