2015-03-31 114 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

相关问题