我有一個視圖控制器的標籤,文本框,活動指標和按鈕控件都與IBOutlets綁定,並可以從我的代碼中訪問。xcode視圖控制器隱藏字段不工作
當用戶按下按鈕時,我隱藏了一些字段,並放置了活動指示器。然後我做一個同步URL調用來獲得一些JSON數據。
視圖控制器未更新以反映活動指示符和隱藏字段,直到同步請求返回後。我需要在請求返回之前發生這種情況,以便用戶看到發生了某些事情。
我試過把一個usleep(200000);;並且試過[self.view setNeedsDisplay]; - - 都無濟於事。
有沒有什麼辦法可以在屏蔽同步調用之前強制屏幕更新?我知道我可以去一個異步調用,但是我真的不想這樣做,因爲我不能在應用程序做任何事情,直到/除非我得到我需要的數據...
感謝, 傑裏
這裏是我用來發送同步請求的代碼:這是例程'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;
}
基本上,當用戶按下鍵盤上的「走出去」按鈕,程序textFieldShouldReturn被調用。我關閉鍵盤,然後模擬按下'Get Events'按鈕。
在btnGetEvents中,我啓動活動指示器,隱藏/顯示幾個字段,然後調用sendGetEventsRequest。在那裏有我做同步呼叫的代碼。
我正在設置活動指示器並顯示/隱藏同步調用之前的字段,但它們不會更新,直到同步調用返回後纔會更新。我相信這是因爲視圖控制器在執行Sync調用之前沒有執行屏幕重繪。
因此,我需要弄清楚如何讓屏幕在同步呼叫之前更新。我希望額外的代碼和其他解釋有所幫助。
請問您可以發佈您使用的代碼來撥打電話並隱藏字段,謝謝 – 2015-04-05 19:24:49
檢查是否http://stackoverflow.com/questions/15358602/self-view-setneedsdisplay-and-self-view- setneedslayout-are-not-working幫助你。 – 2015-04-05 19:38:57
發佈您進行同步呼叫的代碼。我想你可能會在非UI線程中進行調用。 – 2015-04-05 19:56:55