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 - 推送到不在情节提要中的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章