首页 > 代码库 > segmentControl实现控制器的切换
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; } }];}
segmentControl实现控制器的切换
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。