2015-04-05 63 views
0

我有一個視圖控制器的標籤,文本框,活動指標和按鈕控件都與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調用之前沒有執行屏幕重繪。

因此,我需要弄清楚如何讓屏幕在同步呼叫之前更新。我希望額外的代碼和其他解釋有所幫助。

+1

請問您可以發佈您使用的代碼來撥打電話並隱藏字段,謝謝 – 2015-04-05 19:24:49

+0

檢查是否http://stackoverflow.com/questions/15358602/self-view-setneedsdisplay-and-self-view- setneedslayout-are-not-working幫助你。 – 2015-04-05 19:38:57

+0

發佈您進行同步呼叫的代碼。我想你可能會在非UI線程中進行調用。 – 2015-04-05 19:56:55

回答

0

哇,我不能相信我是唯一有這個問題的人。我修改了我的代碼以使用異步調用,並且它工作正常。

相關問題