iOS - 推送到不在情节提要中的视图控制器

Posted

技术标签:

【中文标题】iOS - 推送到不在情节提要中的视图控制器【英文标题】:iOS - Pushing to a View Controller that is not in the Storyboard 【发布时间】:2016-07-30 04:27:04 【问题描述】:

好的,首先让我们命名:

我的根视图控制器中有一个表格视图,我们称之为“HomeViewController”。在该表视图中,每个单元格点击都会推送不同的视图控制器。我们将这个视图控制器集合称为“DetailViewControllers”。

我完全清楚,我可以通过在 didSelectRowAtIndexPath 方法中以编程方式简单地加载和推送每个 DetailViewController 来完成这项工作。我想做一些不同的事情,而不是使用故事板和原型单元,但我没有成功,所以我正在寻找一些建议,因为我不太精通故事板和 segues。

我想在这里实现的行为是: 我将在我的 HomeViewController 的表格视图中从原型单元格中获得一个 segue。该 segue 推送一个“基本”视图控制器,每个 DetailViewController 都从该控制器继承。这些视图控制器在情节提要中也没有分配的视图控制器。

在 prepareForSegue 方法中,我想将“destinationViewController”转换为“正确”类。应用程序在此时崩溃,说“无法将'BaseTestViewController'类型的值转换为'TestViewController'。”。这是完全可以理解的。

所以,我的问题是:有没有办法让 segue 像这样工作?

【问题讨论】:

您是说要推送到情节提要中甚至不存在的视图控制器吗? @JLT 是的,完全正确。这可能吗? 【参考方案1】:

您不能以编程方式创建转场。没有故事板就没有Segues。您可以通过加载 nib 文件来推送到视图控制器。

这就是你的做法。

假设您有一个 nib 文件,其中包含视图控制器主视图的视图布局。例如,我们将其命名为“Test”。

    转到该 nib 文件,单击文件的所有者。

    将类更改为视图控制器的名称。就我而言,我将其命名为 ViewController。

    右键单击文件的所有者。将视图控制器的视图出口链接到 nib 文件中的视图。

    然后在要转换到该视图控制器的视图控制器中,您可以这样做:

    UIViewController *controller = [[UIViewController alloc] initWithNibName:@"Test" bundle:[NSBundle mainBundle]];

    [self presentViewController:controller animated:YES completion:nil];

它将以模态方式呈现视图控制器。

如果您要嵌入导航控制器,那么您可以这样做:

[self.navigationController pushViewController:controller animated:YES];

希望对你有帮助。

【讨论】:

很遗憾,能够在情节提要中动态创建转场和元素将提供很大的灵活性。我知道如何以“正常方式”进行操作,但无论如何感谢您的示例。我接受你的回答,因为你是唯一一个告诉我我不能以编程方式创建 segues 的人。【参考方案2】:

在没有情节提要的情况下尝试这样。

let objDestVC = self.storyboard.instantiateViewControllerWithIdentifier("DestVCStroyboardId") as! DestinationViewController
self.navigationController?.pushViewController(objDestVC, animated: true)

【讨论】:

"我非常清楚,我可以通过在 didSelectRowAtIndexPath 方法中以编程方式简单地加载和推送每个 DetailViewControllers 来完成这项工作。我想做一些不同的事情(...)" "所以,我的问题是:有没有办法让 segue 像这样工作?还是谢谢。

以上是关于iOS - 推送到不在情节提要中的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何在多个 .xib 文件之间执行展开转场(不使用情节提要)

如何在没有情节提要的情况下以编程方式实例化视图控制器

iOS - 如何将选项卡与情节提要中的特定视图控制器链接?

在情节提要中使用 iOS 静态库公共视图控制器?

在 iOS 13 上推送新视图后后退按钮崩溃

您可以使用为带有情节提要的 xib 创建的视图控制器吗?