3

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

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

甚至调用storybard:

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

我一直在浏览和阅读很多东西,但没有什么能解决我的问题。这肯定是我对 iOS 了解不多的问题,但我真的被困住了。我会感谢任何帮助。

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

4

2 回答 2

3

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

至于实际错误,它抱怨 @"WritePostView" 不是情节提要中任何视图控制器的公认名称。请注意,它在这里查找的不是控制器的类名,而是控制器的 Storyboard ID。(这是有道理的,因为您可以使用相同类型的控制器拥有不同的“场景”。)

于 2012-11-02T16:02:37.033 回答
0

好的,看来解决了。我只是在场景之间添加了一个

转义标识符

然后我只需要添加这个:

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

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

干杯

于 2012-11-02T16:02:03.207 回答