Ios 故事板上的视图控制器和我通过代码定义的视图控制器之间的关系是什么?

Ios 故事板上的视图控制器和我通过代码定义的视图控制器之间的关系是什么?,ios,swift,interface-builder,Ios,Swift,Interface Builder,在Interface Builder中创建视图控制器时,通过从Identity Inspector中选择适当的名称,将其与类的代码版本相关联。IB的视图控制器是I类编码的子类吗 据我所知,IB中的视图控制器不是一个实例,因为您仍然需要实例化它: 如果让vc=storyboard?.InstanceDeviceController标识符:详细信息为?详细视图控制器{ //使用vc } 我认为这不是上面示例中视图控制器DetailViewController的代码版本的属性。它是通过序列图像板实例化

在Interface Builder中创建视图控制器时,通过从Identity Inspector中选择适当的名称,将其与类的代码版本相关联。IB的视图控制器是I类编码的子类吗

据我所知,IB中的视图控制器不是一个实例,因为您仍然需要实例化它:

如果让vc=storyboard?.InstanceDeviceController标识符:详细信息为?详细视图控制器{ //使用vc }
我认为这不是上面示例中视图控制器DetailViewController的代码版本的属性。它是通过序列图像板实例化的,而序列图像板又来自UIStoryBoard。

Interface Builder IB中的视图控制器不是您在.swift文件中定义的类的子类。故事板实际上只是帮助您直观地定义UIViewController控制的子视图的布局和约束


基本上,您的代码片段所做的是查找以“Detail”作为标识符的情节提要对象,确保其伴生类的类型为DetailViewController,然后使用该情节提要对象中定义的布局和约束创建DetailViewController的实例。

将情节提要视为一个资源文件。InstanceEviewController只是读取该文件并通过调用其initcoder:initialiser创建特定的UIViewController子类。之后,它会创建故事板上的所有视图,并将其添加到VC的视图中。InstanceViewController如何知道要创建哪个UIViewController子类?当您在identity inspector中键入DetailViewController时,子类的名称实际上存储在情节提要中

您在IB中看到的视图控制器只是一个与此JSON相同的实例

{
    "username": "Sweeper",
    "id": 5133585
}
是此结构的实例:

struct User {
    let username: String
    let id: Int
}

它也不是DetailViewController的子类。它只是一个资源文件中的数据。

故事板是一个场景/视频片段的集合,如果存在,则通过一个序列相互关联,当你创建一个vc时,你可以选择以编程的方式完全按照它的布局创建它,或者在故事板中创建它的布局,然后在identity inspector中指定vc名称,这样你就可以使用它来创建该vc的实例,该实例带有InstanceViewController,该实例链接到故事板中指定的布局。没有超子类关系。vc中的代码是vc生命周期的一系列。在看到Sh_Khan的答案之前,将sotyboard部分视为一种简单的方式,将带有约束的标签/按钮等布局组件添加到vc的视图中,而不是以编程方式创建它们,这是主要区别,我已经解释了我通过代码定义的视图控制器是你用故事板创建的VC?.InstanceEviewController,但你实际上是说你完全用代码创建的VC,没有故事板的帮助吗?是的,这是正确的。你完全用代码创建的VC,没有故事板的帮助好吧,那我就误解了。你认为为什么会有关系?你用故事板创建的VC和不使用故事板创建的VC只是两个独立的VC…基本上,我想知道当你通过身份检查器将故事板上的VC链接到编码的VC时会发生什么,在那里你可以选择一个类的名称好的,所以我的答案不太离谱。。。编辑和取消删除。我很困惑。你说InstanceViewController创建了DetailViewController的一个子类,但它不是一个子类?你能详细说明一下吗?@Kevvv它创建了一个UIViewController子类,这就是你的DetailViewController。它不是DetailViewController的子类。我从来没有说过。比方说,我正在用故事板而不是编程方式创建一个vc。表示名为DetailViewController的vc的故事板本身不是类吗?那么如何通过故事板对其进行实例化呢?.InstanceEviewController?我在别处还有一个名为DetailViewController的vc,它的代码形式是实际的类。当然,故事板版本的DetailViewController不能与编码版本的DetailViewController是同一个类,因为这是重复的。我只是不确定故事板的实体到底是什么。