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

时间:2012-11-02 15:24:35

标签: ios xcode view controller storyboard

我正在开发一个使用Storyboard加载网页(使用UIWebView)的应用程序(我对之前的xib一无所知)。我已经为该UIWebView创建了一个视图控制器,一切正常。问题是:由于以前版本的iOS不允许上传文件,我需要创建一个允许用户选择和发布图片的新视图(我认为它被调用的场景)。我可以单独开发两个视图,它们按预期工作,但现在我需要根据用户想要将图片发布到服务器时触发的事件来连接它们。使用shouldStartLoadWithRequest我可以捕获该操作,然后我需要重定向到新视图(其中包含图像选择器和一个按钮,以便上传所选图像),如果iOS版本低于6.0但我真的迷失了加载新的控制器来显示该视图。使用按钮它是微不足道的,但我不知道如何调用代码内部。到目前为止,我有一个链接到该场景的视图控制器,我尝试过这些方法:

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中丢弃了一个未捕获的异常:decisionPolicyForNavigationAction:request:frame:decisionListener:delegate:Storyboard()不包含带有标识符'WritePostView'的视图控制器* *

我一直在浏览和阅读,但没有解决我的问题。这肯定是我对iOS的不那么大的知识的问题,但我真的被卡住了。我会感谢任何帮助。

顺便说一句,我需要在发布文件后回来,但我可以想象它的方向与方向相反,对吗?

2 个答案:

答案 0 :(得分:3)

如果您的代码位于视图控制器(它似乎是)中,您可以使用self.storyboard获取当前的故事板。您也不需要instantiateInitialViewController,因为如果您的所有UI都来自同一个故事板,那么它已经完成了初始控制器的加载。

至于实际错误,它抱怨@“WritePostView”不是故事板中任何视图控制器的可识别名称。请注意,它在这里查找的是控制器的类名,而是控制器的Storyboard ID。 (这是有道理的,因为你可以使用相同的类型控制器来拥有不同的“场景”。)

答案 1 :(得分:0)

好的,似乎已经解决了。我刚在场景之间添加了 segue

segue identifier

然后我只需要添加这个:

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

它有效!无论如何,我不确定是不是这样做,所以如果有人知道的话,请告诉我。

干杯