使用 ios5 和 storyboard 展示视图控制器

Posted

技术标签:

【中文标题】使用 ios5 和 storyboard 展示视图控制器【英文标题】:presenting view controllers using ios5 and storyboard 【发布时间】:2012-07-16 11:26:00 【问题描述】:

使用[self presentModalViewController:videoViewController animated:YES]; 会叠加多个视图吗?

在 videoViewController 上,我加载了几个 UIWebView,每个都加载到一个视频中。我在该视图上有一个按钮,可以更改类别。单击类别按钮时,它会显示一个弹出视图,并且该视图内有几个用于不同类别的按钮。当按下其中一个按钮时,我正在执行以下操作以返回 videoViewController:

VideoViewController *videoViewController= [self.storyboard instantiateViewControllerWithIdentifier:@"VideoVC"];
[self presentModalViewController:videoViewController animated:YES];

这很有效,它会关闭类别弹出视图并返回到 videoViewController 加载不同的视频。但是,在收到“确实收到内存警告”消息后,多次更改类别我的应用程序开始崩溃。

我有一个类别“全部”,它会在所有视频中加载,但没有收到此类消息,但随后多次更改类别(每个类别在过滤时当然加载较少的视频)我得到了警告。 所以我真正的问题是,当我更改类别并致电[self presentModalViewController:videoViewController animated:YES]; 时,是否只是在每次更改类别时获取视图?因此,例如,如果我更改类别 5 次,我是否会有 5 个 videoViewController 视图彼此重叠?如果是这样,避免这种情况的最佳方法是什么?

我尝试[self presentModalViewController:videoViewController animated:YES]; 来查看是否会有所不同,但 viewViewController 不会重新加载,并且类别弹出视图也不会关闭。

这适用于 iPad 应用程序,如果有影响的话。

谢谢。

【问题讨论】:

【参考方案1】:

每次使用这条线:

VideoViewController *videoViewController= [self.storyboard instantiateViewControllerWithIdentifier:@"VideoVC"];

您正在创建一个新的 VideoViewController 和所有 UIWebviews。您需要的是使用 Objective-C 的委托模式。当用户在弹出视图中选择一个按钮时,您需要对 VideoViewController 的原始瞬间进行回调,并传回用户选择的按钮(例如某种类型的数字)并从那里处理更改。

【讨论】:

我明白了。如果不是太痛苦,有没有对 VideoViewController 的原始实例进行回调的例子? 这是我以前的 SO 答案之一,其中有一个示例。 ***.com/questions/8606674/… 您好,我尝试将您的答案应用到我的项目中,但是当单击类别视图中的按钮时,视频视图没有改变,并且弹出框保持在原位:( 没有看到你的代码......无法猜测。在您的父视图控制器中,当您收到回调时,您需要关闭弹出框 ...

以上是关于使用 ios5 和 storyboard 展示视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 5 上使用 Segues/Storyboard 弹出当前视图

使用 ios5 和情节提要推送带有参数的视图控制器

使用模态呈现的 NavigationController(iOS 5 - Storyboard)时,委托不起作用

使用 App Delegate 访问通过 Storyboard 创建的视图控制器

iOS 5:使用 Xcode/Storyboard 在工具栏中定位条形按钮项

使用 Storyboard 和 Monotouch 手动将更多选项卡添加到 UITabController