zoukankan      html  css  js  c++  java
  • 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;
            }
        }];
    }
  • 相关阅读:
    Linuxqq shell脚本安装后的卸载
    A Spy in the Metro UVA-1025(dp)
    L1-064 估值一亿的AI核心代码
    龙芯 3A4000 安装 Debian10 (via debootstrap)
    Linux用户和用户组
    /etc/issue、/etc/issue.net和/etc/motd的区别
    一种注释
    龙芯平台51单片机开发环境搭建笔记
    Rails UVA-514 (stack)
    The SetStack Computer UVA-12096 (set 操作)
  • 原文地址:https://www.cnblogs.com/striveLD/p/5832527.html
Copyright © 2011-2022 走看看