2011-11-19 79 views
12

我正在设计一个使用XCode 4.2的故事板功能的iOS应用程序。该应用程序有一个登录屏幕,该屏幕需要用户名和密码,并有一个登录按钮。按下登录按钮会触发推送到另一个视图控制器。但是,我希望seque在进入下一个视图控制器之前等待登录返回成功。iOS:使segue等待登录成功

我知道关于prepareForSegue:sender:,但继承人我的问题:登录调用是异步的。因此我不能在那里执行登录。

围绕这个有什么特点吗?我是否可以在故​​事板中创建一个只在需要时触发的seque(与单击按钮时相反)?

回答

37

好吧,我已经想通了。我已经定义了从UIButton到下一个UIViewController的继续。按照这种方式定义,没有办法有条件地执行segue。

代替将按钮放在按钮上,我做了从第一个UIViewController到另一个UIViewController的继续。这定义了赛格,但没有将它与行为联系起来。从那里我可以简单地打电话performSegueWithIdentifier:sender:当我想执行segue(在我的情况是异步任务完成时)。

这对我的主要优势是IB保持其结构。

非常感谢@cli_hlt让我指向正确的方向(+1)。

5

我不知道是否有在IB的方式来执行这样的操作(虽然我强烈怀疑这一点),所以我建议视图控制器上使用

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

当你异步登录成功的信号。

+0

是的,我看到了,我只是希望能有办法做到这一点,我不必在IB中打破流程。 – mtmurdock

1

您也可以在UIStoryBoard的实例上调用instantiateViewControllerWithIdentifier。这将返回一个视图控制器引用到故事板中的任何点。从那里,你可以展示它,不管你喜欢什么,它会收集故事板的流程。

+0

虽然不会出现在IB中。我试图在故事板上保留流程图。你所建议的不会显示IB中两个控制器之间的联系。如果你阅读我的答案,你会看到我在使用IB定义segue时如何能够做到基本上与你提议的相同的事情。感谢您的输入! +1 – mtmurdock