使用故事板
要构成工作流,需要为初始视图控制器指定到其他视图控制器的关系。转换关系在要转到的视图控制器对象被实例化时建立:
1.如果是延续关系,则延续被触发时目标视图控制器实例化
2.如果是包含关系,子控制器在父控制器实例化时实例化
3.如果不是延续或包含,就不会自动创建目标视图控制器。需要在故事板的关联代码中手动创建。
要确定故事板中的视图控制器或延续,需要使用IB来指定一个特殊的识别字串。要手动从故事板中加载一个视图控制器,需要一个识别字串。同样,要手动触发一个延续,也必须有一个识别字串。当一个延续被触发时,延续的识别字串发送给源视图控制器,用于确定哪个延续被触发了。因此,需要为每个延续添加一个识别字串。
当构建app时,可以使用一个故事板管理所有视图控制器,可以建立多个故事板,每个完成应用的一部分。应用会自动加载main 故事板,其他的必须显示加载。
主故事板初始化了应用的用户界面
1.初始化一个window
2.加载主故事板,并初始化指定视图控制器
3.把window的rootViewController属性设置为指定视图控制器,然后显示window
精准步骤见:Coordinating Efforts Between View Controllers
延续(segue)自动初始化目标视图控制器
1.引发延续的对象-- sender
2.开启延续的视图控制器
3.将要实例化的目标视图控制器
4.转换的种类
5.延续的识别字串。
当延续触发时有以下动作:
1.使用在故事板中设置的属性值实例化目标视图控制器
2.给源视图控制器一个配置新视图控制器的机会
3.执行延续中配置的转换
note:当自定义视图控制器时,每个目标视图控制器声明了公有的属性和方法,用于源视图控制器配置其表现。同时,定制的原始图控制器通过重写故事板方法配置目的视图控制器。
手动触发延续
通过performSegueWithIdentifier:sender:方法手动触发延续,使用识别字串。当原控制器被调用配置目标视图控制器时,sender以及识别字串都被延续捕获。
手动实例化故事板的视图控制器
有时候需要手动实例化视图控制器,而不是使用延续。故事板仍然是有用的,因为可以通过故事板配置视图控制器的属性及视图层次。然而,不使用延续的话,不会获得延续的表现。得为推出视图控制器写代码。最好还是用延续,可以省事。
手动实现的步骤:
如果有一个已经存在的故事板管理的视图控制器,可以通过storyboard属性获得故事板。要加载另一个故事板的话,通过故事板的storyboardWithName:bundle:类方法,使用故事板文件的名字和可选bundle参数实现。
2.使用故事板的instantiateViewControllerWithIdentifier:方法,传入IB中设置的视图控制器的识别字串来初始化。也可以使用instantiateInitialViewController方法从故事板实例化视图控制器,不用识别字串。
3.配置新的视图控制器的属性。
4.推出视图控制器。
跳到新的故事板需要用代码实现
1.需要团队开发应用时,每个小团队有一个故事板开发。
2.有一个预定义了许多视图控制器的类库;视图控制器的内容在一个一个的故事板上实现。
3.需要在另外的屏幕上显示内容。这种情况,需要在另一个屏幕的故事板上实现一个视图层次。这种情况也可以通过自定义延续实现。
容器自动实例化它们的子对象
容器中的内容及其子内容将在其视图控制器之前实例化。源视图控制器可以依赖被实例化的子视图控制器。这个实例化表现很重要,因为视图控制器经常需要配置其内容。