如何从视图控制器加载故事板中的场景

我正在开发一个应用程序,加载一个网页(使用UIWebView)使用故事板(我不知道以前的XIB都不)。 我已经创build了该UIWebView的视图控制器,一切工作正常。 问题是:由于以前版本的iOS不允许上传文件,因此我需要制作一个新的视图(场景,我认为它被称为),允许用户挑选和张贴图片。 我能够分别开发这两个视图,他们按预期工作,但现在我需要连接他们基于事件触发时,用户想要张贴图片到服务器。 使用shouldStartLoadWithRequest我可以捕捉到这个动作,然后我需要redirect到新的视图(其中包含图像select器和一个button,以上传所选的图像),如果iOS版本低于6.0,但我真的失去了,当加载新控制器来显示该视图。 使用button是微不足道的,但我不知道如何在代码中调用。 到目前为止,我有一个视图控制器链接到这个场景,我已经尝试了这些方法:

WritePostViewController *postViewController = [[WritePostViewController alloc] init]; [self.navigationController pushViewController:postViewController animated:YES]; 

甚至叫故事:

 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; [sb instantiateInitialViewController]; UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"WritePostView"]; vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentViewController:vc animated:YES completion:NULL]; 

第一种方法什么都不做,第二种方法显示这个错误日志:

* WebKit在webView中放弃了未捕获的exception:decidePolicyForNavigationAction:request:frame:decisionListener:delegate:Storyboard()不包含标识符为“WritePostView”的视图控制器*

我一直在浏览和阅读很多,但没有解决我的问题。 当然,这是一个问题,我不是很了解iOS的知识,但我真的被卡住了。 我会感谢任何帮助。

顺便说一下,我需要在发布文件后回来,但我可以想象,这是相同的方向相反的方向,对不对?

如果你的代码是在视图控制器(它似乎是)内,你可以用self.storyboard获得当前的故事板。 你也不需要instantiateInitialViewController因为如果你所有的用户界面都来自同一个故事板,它已经经历了初始控制器的加载。

至于实际的错误,这是抱怨@“WritePostView”不是故事板中的任何视图控制器的公认名称。 请注意,这里查找的不是控制器的类名,而是控制器的故事板ID。 (这是有道理的,因为你可以有不同的“场景”与相同types的控制器。)

好吧,似乎解决了。 我只是在场景之间添加了一个segue

segue标识符

然后我只需要添加这个:

 [self performSegueWithIdentifier:@"writePostViewSegue" sender:self]; 

它的工作原理! 无论如何,我不确定是否要这样做,所以如果有人知道更好,请让我知道。

干杯