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; } }]; }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM