iOS - 推送到不在Storyboard中的View Controller

时间:2016-07-30 04:27:05

标签: ios uistoryboard

好的,首先让我们说出一些事情:

我的根视图控制器中有一个表视图,我们将调用" HomeViewController"。在该表视图中,每个单元格抽头将推送不同的视图控制器。这个视图控制器集合我们将调用" DetailViewControllers"。

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

我试图在这里实现的行为是: 我在HomeViewController的表视图中有一个原型单元格的segue。那个segue推动了一个" base"视图控制器,每个DetailViewController都从该控制器继承。这些视图控制器在故事板中也没有指定的视图控制器。

在prepareForSegue方法中,我想要转换' destinationViewController'到了'对''类。该应用程序在此时崩溃说它"无法转换类型' BaseTestViewController'到' TestViewController'。"。这完全可以理解。

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

2 个答案:

答案 0 :(得分:0)

尝试没有故事板segue。

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

答案 1 :(得分:0)

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

这是你如何做到的。

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

  1. 转到该nib文件,点击文件的所有者。enter image description here

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

  3. enter image description here

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

    2. 然后在要转换到该视图控制器的视图控制器中,执行以下操作:

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

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

    3. 它将以模态方式显示视图控制器。

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

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

      希望它有所帮助。