View-Controller-Containment

  1. willMove(toParentViewController:)

    • 调用时机
    • 调用addChildViewController(_:)以钱会被自动调用
    • 调用removeFromParentViewController()之前被手动调用。
  2. didMove(toParentViewController:)
    • 调用时机
    • 调用removeFromParentViewController()方法之后被自动调用
    • 调用addChildViewController(_:)方法之后被手动调用。
  3. 把子vc的view加到父vc的view上
    [self addChildViewController:_startMapViewController];          //  1  作为子VC,会自动调用子VC的willMoveToParentViewController方法。
    [topContainer addSubview:_startMapViewController.view];         //  2 子VC的view被作为subview添加到第一个viewContainer中
    [_startMapViewController didMoveToParentViewController:self];   //  3 子VC被通知拥有一个父VC。
    
  4. 把子VC的view移除
    [fromController willMoveToParentViewController:nil];//
    调用转场方法或者[fromController.view removeFromSuperView]
    [fromController removeFromParentViewController];    //
    

5 transition(from:to:duration:options:animations:completion:)

This method adds the second view controller'??s view to the view hierarchy and then performs the animations defined in your animations block. After the animation completes, it removes the first view controller'??s view from the view hierarchy.

这个函数首先把第二个VC的view加到父vc的字view上,然后执行动画,最后把第一个vc的view从view hierarchy中移除。

{
    toController.view.frame = fromController.view.bounds;                           //  1
    [self addChildViewController:toController];                                     //
    [fromController willMoveToParentViewController:nil];                            //  

    [self transitionFromViewController:fromController
                      toViewController:toController
                              duration:0.2
                               options:direction | UIViewAnimationOptionCurveEaseIn
                            animations:nil
                            completion:^(BOOL finished) {

                                [toController didMoveToParentViewController:self];  //  2
                                [fromController removeFromParentViewController];    //  3
                            }];
}

这个函数是把fromVC及其View移除,toVC及其View加到界面上去。

  • fromVC移除

    [fromController willMoveToParentViewController:nil]; //函数调用前
    [fromController removeFromParentViewController];    //  动画block中
    [fromController.view removeFromSuperView] //动画block之后
    
  • toVC加到界面上
    [self addChildViewController:toController]; //函数调用前
    [self.view addSubView:toController.view] //动画block之前
    [toController didMoveToParentViewController:self];  //  block之中
    

View Controller Containment

时间: 2024-11-08 23:56:34

View-Controller-Containment的相关文章

组合View Controller时遇到的一点问题

View Controller的组合应用其实很常见了,比如说Tab bar controller和Navigation view controller的组合使用,像这种一般都是Navigation view controller作为Tab bar controller的一个child view controller,对应了一个Tab bar item. 然后今天在Review 另外一组的一个产品的代码时,发现他们将Tab bar controller作为了一个普通view controller的

【IOS笔记】View Controller Basics

View Controller Basics   视图控制器基础 Apps running on iOS–based devices have a limited amount of screen space for displaying content and therefore must be creative in how they present information to the user. Apps that have lots of information to display

ZK Spring 整合View/Controller层属性注入

问题场景 ZK实例化的View/Controller不同于Spring MVC实例化的Controller,不受Spring管理,无法进行注入. 解决方案 方法一 在doAfterCompose方法中调用SpringUtil提供的获取bean的方法,给bean赋值,代码如下: userService = (UserService) SpringUtil.getBean("userService"); 方法二 在doAfterCompose方法中调用Spring的自动注入方法进行所有be

设置view controller到iPhone或者iPad模式

在写iOS程序时,view controller的显示大小以及控件大小的调节是在是一个费力的事,尤其是对于用mac本的童鞋,更难驾驭,这时我们可以根据需要设置专门针对iphone或者ipad的view controller的大小,可以修改设置项“Use Size Classes": 当选中时:view controller能同时适用iPhone和ipad的尺寸 未选中时:有提示框来指导是用iPhone的尺寸还是ipad得尺寸,运行时会根据选择的simulator变化

Failed to instantiate the default view controller

1, Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set? 这是因为给你的StoryBoard没有设置默认显示的controller, 解决方法:

Methods throughout the lifespan of a view controller

Method                                DescriptionloadView                              Creates or returns a view for the view controller.viewDidLoad                       View has finished loading.viewWillAppear:                    View is about to a

Application tried to present a nil modal view controller on target “Current View Controller”解决方案

情景再现 1,自定义一个storyboard: 打开xcode,按下cmd+N,新建一个Storyboard--->next 将新建立的storyboard命名为:TestViewController--->create 在TestViewController.storyboard上加上一个label,其text为:Hello-ios 2,编写UIButton的UIControlEventTouchUpinside事件: - (IBAction)btnClick:(id)sender { //

用Swift完成不同View Controller之间的切换

之前用objective-c开发时,页面之间的切换很容易.其实用swift没有很大的变化,如果你是用storyboard完成的界面,基本上是同样的方式,只不过在代码部分写成swift风格的就行了. 今天在实验开发一个简单的小程序时,却遇到了一些bug,后来还是求助stackoverflow上的大神解决了问题,在此做下记录. 我的程序结构是这样的,在一个页面A中有个按钮,然后点击按钮以后,切换到另一个页面B.A和B都在同一个storyboard中. 这里先说下通用的方法: 手动用代码建好的view

Spring MVC-控制器(Controller)-可参数化视图控制器(Parameterizable View Controller )示例(转载实践)

以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_parameterizableviewcontroller.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显示了如何使用Spring Web MVC框架使用多操作控制器的Parameterizable View Controller方法.可参数化视图允许使用请求映射网页. package com.tutorialspoint; import javax.ser

MVC模式(Model View Controller)下实现数据库的连接,对数据的删,查操作

MVC模式(Model View Controller): Model:DAO模型 View:JSP  在页面上填写java代码实现显示 Controller:Servlet 重定向和请求的转发: 若目标的相应页面不需要从request里面读取任何信息,则可以使用重定向,可以防止表单重复提交: ------------------------------------------------------------------------------------------------ Stude