嵌入式Segue - iOS 5

6

我将一个容器视图拖到了其中一个视图控制器上。这个操作会自动创建一个嵌入式Segue。运行程序后,会产生以下效果:

'Could not instantiate class named UIStoryboardEmbedSegueTemplate'

根据其他几个stackoverflow的问题,似乎iOS 5中没有实现这个功能。然而,这些问题并没有提出解决方法。XCode不允许我使用其他类型的segue。

如果答案是创建自定义容器视图,我会接受。在过去的几天里,我看到了很多相关代码。只是想知道是否有一种方法可以使用提供的容器视图对象来实现这个功能。

1个回答

9
问题在于Embed segue仅适用于iOS 6及以上版本。由于您正在尝试实例化iOS 5中不存在的EmbedSegue内部类,因此会失败。如果需要支持iOS 5,则明显的解决方案是不使用EmbedSegue :)。
接下来还有一个问题 - 要使用什么替代品?我目前也遇到了同样的问题;如果我找到任何优雅的架构解决方案,我将分享。
看起来对于任何“老派”iOS开发人员来说,解决方案都很明显。以下是具体步骤:
1. 在“父”视图控制器中,在viewDidLoad中或适当的时间实例化“子”视图控制器。 2. [self addChildViewController:childVC]; 3. [self.view addSubview:childVC.view]; 4. childVC.view.frame = ....;
现在,您应该可以在父视图中看到从nib或storyboard中为子VC创建的视图。希望这能帮助任何寻求解耦逻辑的人 :)
顺祝商祺, 丹

刚刚为 iOS < 6 添加了 EmbedSegue 的替代方法。 - Dannie P
也许是一个愚蠢的问题,但是你能填写第四步吗?你将self.view.frame分配给它吗? - canhazbits
我认为这取决于你的情况。如果你想让子视图占据其父视图上所有可用的空间,那么你可能想使用childVC.view.frame = parentView.bounds;在这种情况下,父视图可以是self.view或一个占位符视图。当你在IB中对齐一个占位符并且在代码中只需将childVC.view连接到占位符视图而无需手动计算子视图的起点和大小时,占位符非常有用。不过,如果你愿意,你仍然可以使用childVC.view.frame = CGRectMake(...); 并手动指定大小和起点。这对你的情况有帮助吗? - Dannie P
谢谢提供信息 - 对我来说,这段代码的所有变体都没有起作用,所以最终我删除了我的ContainerView,改为使用单个ViewController。现在一切正常! - canhazbits
当然,如果您使用“添加子VC”方法,则不需要使用嵌入式segue或容器视图。请使用普通的UIView作为占位符。祝好。 - Dannie P
添加一个childViewController: 链接 - Warif Akhand Rishi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接