以编程方式更改目标viewcontroller类(swift)

时间:2015-03-20 13:34:53

标签: swift core-data uiviewcontroller interface-builder uistoryboardsegue

我有一个可能有些不同寻常的问题。我正在开发一个具有两个不同核心数据实体(会话和例程)的应用程序。随后,我在界面构建器中有两个不同的视图控制器来填充这些实体的属性。问题是这两个实体是相同的,除了我需要会话与客户实体和例程之间没有任何关系的多对一关系。

问题是这个。我喜欢在界面构建器中为我的会话和例程类使用相同的视图控制器,有没有一种方法可以编程地根据segue标识符确定接口构建器viewcontroller分配给哪个类?我知道它必须是某种if segue.identifier == "myIdentifier" { /*code for changing destination view controller's class*/}声明,但我不确定代码是什么,我也想听听其他方法,以便更有效地做到这一点。

谢谢!

1 个答案:

答案 0 :(得分:0)

Storyboard中的视图控制器是某个类的归档对象,您不能将其分配给其他类。 (就像你有一个String对象并希望将其指定为Int一样不会很好用)

您可以在destinationViewController内查看segue的prepareForSegue:属性,如果它是这样的某个类:

if let dvc = segue.destinationViewController as? MyExpectedVC {
    // do something
}

但这可能不是你想要/应该做的。

我会按照您的问题的评论者的说法,并建议您的视图控制器类为您的模型实现配置方法。对于每个类都是单独的一个:

func prepareWithSession(session: Session) {/* ... */}
func prepareWithRoutine(session: Routine) {/* ... */}

或(imho有点好)为视图控制器可以显示的所有类创建一个协议,并且只有一个方法:

func prepareWithDisplayable(session: DisplayableType) {/* ... */}

其中DisplayableType是一个协议,它定义了这个视图控制器需要知道的所有属性。

您可以在视图控制器中使用自定义逻辑,仅显示特定类型的某些字段。 (例如设置为其他类型隐藏的视图)