2015-03-31 155 views
0

我必須以編程方式更改視圖。我的代碼只在視圖出現之前有效。在視圖出現後以編程方式更改視圖

我的代碼:

let tabController = self.storyboard?.instantiateViewControllerWithIdentifier("tabs") as UITabBarController 
self.presentViewController(tabController, animated: false, completion: nil) 

如果我使用的viewDidAppear這裏面的代碼,它的工作原理well.But我需要的東西不同。

我的系統:

1)用戶按下該按鈕

2)我做的POST請求到我的服務器

3)如果服務器返回 「真」 我想改變觀點。

我該怎麼做?

Ps:我不問任何關於post request的問題。我只需要如何在視圖出現後以編程方式更改視圖。

+1

顯示服務器返回「true」時調用的(委託)方法。這是你想要做「'self.presentViewController'」代碼的地方。 – 2015-03-31 18:59:45

+0

你能舉個例子嗎? – Okan 2015-03-31 19:06:37

+0

我可以...但你可以顯示當服務器返回「真」時被調用的方法嗎? – 2015-03-31 19:07:47

回答

2

我猜你的服務器請求是一個後臺任務,服務器響應是在一個閉包中處理的......我是對的嗎?

如果是這樣,您必須記住,用戶界面的更改總是必須在主線程中完成。因此,將這些更新推送到服務器的答案關閉中的主線程:

{ 
    // within answer closure 

    dispatch_async(dispatch_get_main_queue(), { 
     // user interface updates here... 

     // example: stop an activityIndicator from spinning... 
     self.activityIndicator.stopAnimating() 
    }) 

} 
+0

'LoginViewController'沒有名爲'activityIndi​​cator'的成員我收到了。我該如何解決它? – Okan 2015-03-31 19:45:39

+0

對不起,這只是主線程中可以完成的一個例子。在這種情況下,我停止了一個activityIndi​​cator的旋轉。它必須由您自己的代碼替換以更新UI元素。 – zisoft 2015-03-31 19:47:26

+0

哦對不起:)它的工作,謝謝你 – Okan 2015-03-31 19:50:15

0

因此,在您的代碼段,你會想,當你得到一個成功的結果做視圖改變(我認爲在你的代碼是「狀態== 1」):

if status == 1 { 
    let tabController = self.storyboard?.instantiateViewControllerWithIdentifier("tabs") as UITabBarController 
    self.presentViewController(tabController, animated: false, completion: nil) 
} 
+0

不是,我試了這個。而我的應用程序崩潰。日誌:http://prntscr.com/6ntqn1 – Okan 2015-03-31 19:22:31

+0

Okan你嘗試了這個答案的組合,但被稱爲主線程在zisofts答案? – boidkan 2015-03-31 19:25:39

相關問題