segmentControl实现控制器的切换

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //1 创建窗口
    self.window = [[UIWindow alloc] init];
    self.window.frame = [UIScreen mainScreen].bounds;
    //2 设置主控制器
    XCMainController *mainVc = [[XCMainController alloc] init];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:mainVc];
    self.window.rootViewController = nav;
    //3 显示window
    [self.window makeKeyAndVisible];

    return YES;
}

第一个控制器初始化view:

- (void)viewDidLoad{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor purpleColor];

    UILabel *label = [[UILabel alloc] init];
    label.text = @"fristController";
    label.font = [UIFont systemFontOfSize:17];
    label.frame = CGRectMake(100, 100, 200, 100);
    [self.view addSubview:label];
}

第二个控制器初始化view:

- (void)viewDidLoad{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor greenColor];

    UILabel *label = [[UILabel alloc] init];
    label.text = @"secondController";
    label.font = [UIFont systemFontOfSize:17];
    label.frame = CGRectMake(100, 100, 200, 100);
    [self.view addSubview:label];
}

主控制器逻辑实现 
添加子控制器

- (void)viewDidLoad{
    [super viewDidLoad];
    self.navigationItem.titleView = [self setupSegment];

    self.fristVc = [[XCFristController alloc] init];
    self.fristVc.view.frame = CGRectMake(0, navigationHeight, mainVcWidth, mainVcHeight - 64);
    [self addChildViewController:_fristVc];

    self.secondVc = [[XCSecondController alloc] init];
    self.secondVc.view.frame = CGRectMake(0, navigationHeight, mainVcWidth, mainVcHeight - 64);
    [self addChildViewController:_secondVc];

    //设置默认控制器为fristVc
    self.currentVC = self.fristVc;
    [self.view addSubview:self.fristVc.view];

}

初始化UISegmentControl:

/**
 *  初始化segmentControl
 */
- (UISegmentedControl *)setupSegment{
    NSArray *items = @[@"1", @"2"];
    UISegmentedControl *sgc = [[UISegmentedControl alloc] initWithItems:items];
    //默认选中的位置
    sgc.selectedSegmentIndex = 0;
    //设置segment的文字
    [sgc setTitle:@"oneView" forSegmentAtIndex:0];
    [sgc setTitle:@"twoView" forSegmentAtIndex:1];
    //监听点击
    [sgc addTarget:self action:@selector(segmentChange:) forControlEvents:UIControlEventValueChanged];
    return sgc;
}

监听segmentControl点击事件:

- (void)segmentChange:(UISegmentedControl *)sgc{
    //NSLog(@"%ld", sgc.selectedSegmentIndex);
    switch (sgc.selectedSegmentIndex) {
        case 0:
            [self replaceFromOldViewController:self.secondVc toNewViewController:self.fristVc];
            break;
        case 1:
            [self replaceFromOldViewController:self.fristVc toNewViewController:self.secondVc];
            break;
        default:
            break;
    }
}

控制器切换

/**
 *  实现控制器的切换
 *
 *  @param oldVc 当前控制器
 *  @param newVc 要切换到的控制器
 */
- (void)replaceFromOldViewController:(UIViewController *)oldVc toNewViewController:(UIViewController *)newVc{
    /**
     *  transitionFromViewController:toViewController:duration:options:animations:completion:
     *  fromViewController    当前显示在父视图控制器中的子视图控制器
     *  toViewController        将要显示的姿势图控制器
     *  duration                动画时间(这个属性,old friend 了 O(∩_∩)O)
     *  options              动画效果(渐变,从下往上等等,具体查看API)UIViewAnimationOptionTransitionCrossDissolve
     *  animations            转换过程中得动画
     *  completion            转换完成
     */
    [self addChildViewController:newVc];
    [self transitionFromViewController:oldVc toViewController:newVc duration:0.1 options:UIViewAnimationOptionTransitionCrossDissolve animations:nil completion:^(BOOL finished) {
        if (finished) {
            [newVc didMoveToParentViewController:self];
            [oldVc willMoveToParentViewController:nil];
            [oldVc removeFromParentViewController];
            self.currentVC = newVc;
        }else{
            self.currentVC = oldVc;
        }
    }];
}
时间: 2024-08-01 00:33:32

segmentControl实现控制器的切换的相关文章

iOS_仿QQ空间_控制器的切换_自定义segmentCtrol

最终效果图: 主控制器 // // BeyondViewController.m // 28_QQ空间 // // Created by beyond on 14-9-1. // Copyright (c) 2014年 com.beyond. All rights reserved. // 主控制器包括两个部分:左边的Dock,右边的contentView,其中左边Dock又包括三个部分(顶部的头像按钮.中部的选项卡.底部的一个整体),其中底部的整体 包含三个按钮「说说.拍照.日记」,中部的选项

iOS边练边学--父子控制器之自定义控制器的切换

一.如图所示的界面,按钮One.Two.Three分别对应三个控制器的view,点击实现切换.个人感觉父子控制器的重点在于,控制器的view们之间建立了父子关系,控制器不建立的话,发生在view上面的事件,对应的view可能接收不到,控制器们建立了父子关系后,可以将事件传递给相应的控制器. 练习代码如下: 1 #import "ViewController.h" 2 #import "OneTableViewController.h" 3 #import "

【iOS开发-24】导航控制器下不同视图控制器之间切换:利用CATrasition和view的layer层来实现自定义的动画效果

(1)这里的动画效果指的是界面切换的动画效果,我们常见的又淡入淡出,右出左进等等,当然还有一些高级动画,这种动画适合游戏类的,对于一般APP会显得太花哨. (2)我们在此处没有增加任何框架(QuartzCore)也没有导入什么头文件(QuartzCore.h),就可以直接用CATransiton(相当于是CAAnimation的子类)来创建一个对象,如animation1. (3)创建完之后我们就对这个动画对象进行动画设置,这里面主要是涉及到type属性,而且值有两种:一种是调用系统自带的一些效

自定义视图控制器切换(iOS)

在iOS开发过程中,通常我们会使用UINavigationController,UITabbarController等苹果提供的视图控制器来切换我们的视图.在iOS5之前,如果要自定义容器视图控制器很麻烦,比如你要考虑到子视图的生命周期,当设备旋转时的情况等,好在iOS5中苹果提供了添加视图控制器(addChildViewController)等管理视图控制器的API,这样我们就能使用此API来自定义自己的视图控制器了,这篇文章只要介绍如何使用此API实现UITabbarController的基

UIVIewController自定义切换效果-b

之前介绍动画时提过UIView的转场动画,但是开发中我们碰到更多的viewController的切换,ios中常见的viewcontroller切换有四种:模态视图,导航栏控制器,UITabBarController以及addchildviewcontroller,自定义viewcontroller动画切换也是ios7中的新特性,这里整理下常见的操作,outline如下(本文参考http://onevcat.com/2013/10/vc-transition-in-ios7/,代码下载地址为ht

控制器管理UINavigationController、UINavigationBar

控制器管理 掌握 控制器以及view的多种创建方式 UINavigationController的简单使用:添加\移除子控制器 UINavigationBar内容的设置 控制器的生命周期方法 Segue的使用 控制器之间数据的传递 UITabBarController的简单使用 UITabBarController和UINavigationController的混合使用 Modal 如何创建一个控制器 控制器常见的创建方式有以下几种 Ø通过storyboard创建 Ø直接创建 MJViewCon

控制器管理

控制器常见的创建方式有以下几种 通过storyboard创建 直接创建 MJViewController *mj = [[MJViewController alloc] init]; 指定xib文件来创建 MJViewController *mj = [[MJViewController alloc] initWithNibName:@"MJViewController" bundle:nil]; n先加载storyboard文件(Test是storyboard的文件名) UIStor

iOS狂暴之路---视图控制器(UIViewController)使用详解

一.前言 在之前的一片文章中已经介绍了 从iOS的第一个应用中能学习到哪些知识点 在那篇文章中主要介绍了一个iOS程序的启动过程和应用的几大对象,以及应用的生命周期,同时也介绍了应用中的控制器知识点,介绍了其生命周期方法,那么对于一个iOS应用一般都是会包含多个页面,而每个页面就是一个控制器,一个控制器一般都是关系到一个UIView的,但是我们在真正使用这些控制器的时候会发现,多个页面之间的跳转关系该如何控制.在之前的文章知道一个应用对应一个窗口对象UIWindow,每个窗口都有一个根控制器对象

UI整理-----part8--导航控制器(navigationController)

---恢复内容开始--- (1)UINavigationController通常被称作导航控制栏,是视图与视图之间沟通联系的桥梁,是个类的控制器,用来管理试图控制器的切换,导航栏是一个导航控制器共用的. (2)导航控制器用来管理其他控制器显示视图,本身是不显示视图内容的. (3)导航控制器主要用来控制多控制器的连续切换 (4)U ---恢复内容结束--- (1)UINavigationController通常被称作导航控制栏,是视图与视图之间沟通联系的桥梁,是个类的控制器,用来管理试图控制器的切