`

(转)【iOS】ViewController容器篇

    博客分类:
  • IOS
阅读更多

转自:http://www.jianshu.com/p/f82da0662c8a

 

OS5之后,苹果完善了以viewcontroller来作为容器处理视图控制器切换的相关API,

具体的方法和属性有如下几个:

@property(nonatomic,readonly) NSArray *childViewControllers

- (void)addChildViewController:(UIViewController *)childController

- (void) removeFromParentViewController

- (void)transitionFromViewController...

- (void)willMoveToParentViewController:(UIViewController *)parent

- (void)didMoveToParentViewController:(UIViewController *)parent

willMoveToParentViewController方法:

  • 当我们向我们的视图控制器容器中调用removeFromParentViewController方法时,必须要先调用该方法,且parent参数为nil:

    [将要删除的视图控制器 willMoveToParentViewController: nil];

    [将要删除的视图控制器 removeFromParentViewController: 父];

  • 当我们调用addChildViewController方法时,在添加子视图控制器之前将自动调用该方法。所以,就不需要我们显示调用了。


didMoveToParentViewController方法:

当从一个视图控制容器中添加或者移除viewController后,该方法被调用。

  • 当我们向我们的视图控制器容器中添加(或者删除)子视图控制器后,必须调用该方法,告诉iOS,已经完成添加(或删除)子控制器的操作。

    [将要删除的视图控制器 addChildViewController: nil];

    [将要删除的视图控制器 didMoveToParentViewController: 父];

  • removeFromParentViewController方法会自动调用了该方法,所以,删除子控制器后,不需要在显示的调用该方法了。


归纳总结:

  1. addChildViewController:向父VC中添加子VC,添加之后自动调用willMoveToParentViewController: superVC

  2. removeFromParentViewController:将子VC从父VC中移除,移除之后自动调用

    didMoveToParentViewController: nil

  3. willMoveToParentViewController:当向父VC添加子VC之后,该方法会自动调用。若要从父VC移除子VC,需要在移除之前调用该方法,传入参数nil。

  4. didMoveToParentViewController:
    当向父VC添加子VC之后,该方法不会被自动调用,需要显示调用告诉编译器已经完成添加(事实上不调用该方法也不会有问题,不太明白);
    从父VC移除子VC之后,该方法会自动调用,传入的参数为nil,所以不需要显示调用。

    注意点:

    要想切换子视图控制器a/b, a/b必须均已添加到父视图控制器中,不然会报错

  5. transitionFromViewController: toViewController...在调用这个方法之前先调用

    [fromViewController willMoveToParentViewController: nil];

    在completion后 ,调用[toViewController didMoveToParentViewController:self];

代码实例

 

                          /************ 添加 ***********/

[self addChildViewController: _currentVC];

// [_currentVC willMoveToParentViewController: self];(自动调用  省略)

//[_currentVC didMoveToParentViewController: self]; (可省略)

                         /************ 移除 ***********/

[_currentVC willMoveToParentViewController: nil];

[_currentVC removeFromParentViewController];

//[_currentVC didMoveToParentViewController: nil]; (自动调用 省略)

                         /************ 转换 ***********/
1.
[_currentVC willMoveToParentViewController: nil];

[self transitionFromViewController: _currentVC toViewController: _secondVC];

[_secondVC didMoveToParentViewController: self];

2.

//转换子视图控制器
- (void)transitionFromOldViewController:(UIViewController *)oldViewController toNewViewController:(UIViewController *)newViewController{
    [self transitionFromViewController:oldViewController toViewController:newViewController duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations:nil completion:^(BOOL finished) {
        if (finished) {
            [newViewController didMoveToParentViewController:self];
            _currentVC = newViewController;
        }else{
            _currentVC = oldViewController;
        }
    }];
}
分享到:
评论

相关推荐

    iOS7 ViewController转场

    本篇将深入探讨"ViewController转场",主要关注系统视图控制器容器(如UINavigationController)中的push、pop、present和dismiss操作的动画效果。 1. **系统转场动画** iOS系统提供了默认的转场动画,如...

    ios7自定义viewcontroller切换效果

    标题“ios7自定义viewcontroller切换效果”和描述“ios7 viewcontroller 自定义切换效果,项目简单,demon清晰”指的是如何在iOS 7环境中,自定义UIViewController之间的过渡动画,以提供更加个性化和流畅的用户界面...

    ios UIView或者UIViewController缩放动画效果

    // 在容器视图中添加从和到的视图 transitionContext.containerView.addSubview(toView) transitionContext.containerView.addSubview(fromView) // 缩放动画 fromView.transform = CGAffineTransform(scaleX...

    iOS开发中的ViewController转场切换效果实现简介

    4. **addChildViewController**:这是一种自定义的转场方式,适用于需要自定义容器ViewController的情况,例如创建滑动TabBar或者页面控制器等。 然而,这些系统提供的方法在某些情况下可能无法满足开发者对复杂...

    自定义presentViewController的转场动画(Swift)

    本篇文章将深入探讨如何在Swift中自定义`presentViewController`的转场动画,帮助开发者创建出独特且吸引人的界面过渡效果。 首先,我们需要了解`UIViewControllerTransitioningDelegate`协议。这个协议提供了...

    iOS开发中ViewController的页面跳转和弹出模态

    UINavigationController是一个容器控制器,它管理着一系列的ViewController,并通过堆栈的方式进行管理。当你调用`pushViewController:animated:`方法时,新的ViewController会被压入栈顶并显示出来。当需要返回时...

    iOS自定义转场

    该委托允许控制器指定其转场的动画控制器和视图控制器容器。通过实现`animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController)`和`animation...

    0代码实现viewcontroller

    本篇文章将深入探讨如何在不编写额外代码的情况下实现`UIViewController`的功能,以及如何通过其他方式使`UIViewController`保持简洁、易于维护。 一、`UIViewController`概述 `UIViewController`是Apple iOS SDK中...

    ios UIView翻转动画效果

    1. `view`: 需要进行动画的视图,通常是容器视图。 2. `duration`: 动画持续的时间,以秒为单位。 3. `options`: 动画选项,这里我们将使用`UIViewAnimationOptionTransitionFlipFromLeft`或`...

    ARNPageContainer:水平滚动分页 ViewController 容器

    ARN页面容器 它的灵感来自以下产品。 用法 要运行示例项目, pod install克隆 repo,然后从 Example 目录运行pod install 。 要求 iOS 7.0+ 弧 安装 ARNPageContainer 可通过。 要安装它,只需将以下行添加到您的 ...

    滑动切换ViewController

    总结来说,滑动切换ViewController在iOS开发中是一个常用的功能,可以通过`UIPageViewController`或自定义容器ViewController来实现。选择哪种方式取决于你的需求和对定制程度的要求。无论是哪种方法,都需要关注...

    iOS转场动画

    3. 自定义视图容器:自定义容器视图可以实现更复杂的转场动画,比如棋盘效果、3D翻转等。 六、优化与性能 1. 资源管理:注意动画的内存消耗,避免在动画中创建过多临时对象。 2. 动画性能:优化动画帧率,确保在低...

    swift-开关viewcontroller像iOS任务管理器

    `UINavigationController`则是管理一系列`UIViewController`实例的容器,它负责在这些视图控制器之间进行推(pushViewController)和弹(popViewController)操作,形成类似堆栈的管理方式。 在创建类似iOS任务管理...

    IOS实现类似Android的ViewPager

    这篇内容将详细介绍如何在iOS应用中创建一个简易的ViewPager,以达到与Android平台上ViewPager相似的用户体验。 首先,我们需要理解Android的ViewPager是如何工作的。在Android中,ViewPager是一个可以展示多个页面...

    ios-MagicTransitionDemo.zip

    4. 视图控制器容器(ViewController Containers): 自定义转场往往涉及到多个视图控制器的协同工作,因此理解`UIContainerView`和`UIPresentationController`的概念至关重要。在MagicTransitionDemo中,可能涉及到...

    IOS 自定义标签栏

    本篇文章将深入探讨如何在iOS应用中实现自定义标签栏,以增强用户界面的个性化与交互体验。 首先,我们了解下iOS系统内置的UITabBarController。它是苹果官方提供的用于管理多个ViewController的容器,其底部通常会...

    ARNPageContainer-Swift:水平滚动分页ViewController容器。 (快速郎)

    要求Xcode 7.1以上iOS 8.0以上斯威夫特2.1 CcoaPods 0.36.0+(如果使用CcoaPods)可可豆ARNPageContainer-Swift可通过。 要安装它,只需将以下行添加到您的Podfile中: pod "ARNPageContainer-Swift"执照MIT许可证。...

    IOS源码——ios适用于iOS 5、iOS 6和iOS 7的自定义NavigationBar.zip

    iOS中的NavigationController是管理一系列ViewController的容器,它会在顶部显示一个NavigationBar。NavigationBar通常包含一个标题和左侧/右侧的BarButtonItems,可以通过设置这些元素来实现自定义。 2. **...

    iOS 自定义转场动画

    在iOS开发中,自定义转场动画是一种提升用户体验的有效手段,它可以让你的应用界面更加生动、独特。本教程将深入探讨如何利用`UIViewControllerContextTransitioning`接口实现自定义转场动画。 `...

    iOS+软件开发揭密:iPhone&iPad+企业应用和游戏开发样章.doc

    本文详细介绍了iOS开发中的两种重要容器视图控制器——UINavigationController和UITabBarController。这两种容器视图控制器可以帮助开发者有效地组织和管理复杂的用户界面,提高应用的可用性和用户体验。通过学习...

Global site tag (gtag.js) - Google Analytics