iOS 学习笔记三【segmentedControl分段控制器详细使用方法】

  在iOS开发过程中,分段控制器的使用频率还是蛮高的,下面是我写的一个简单的demo,大家可以把代码直接复制过去,就可以使用,ios9最新支持。

//
//  ViewController.m
//  03_Segmentedcontrol_Test
//
//  Created by 博爱之家 on 15/12/1.
//  Copyright © 2015年 博爱之家. All rights reserved.
//

#import "ViewController.h"

//宏定义
//当前设备的屏幕宽度
#define KSCREEN_WIDTH   [[UIScreen mainScreen] bounds].size.width

//当前设备的屏幕高度
#define KSCREEN_HEIGHT   [[UIScreen mainScreen] bounds].size.height

// 颜色
#define COLOR_C(R, G, B, A) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:A]

@interface ViewController ()

@property (nonatomic, strong) UIView *subView;
@property (nonatomic, strong) UIView *currentView;
@property (nonatomic, strong) UISegmentedControl *segmentedControl;
//滚动的下划线
@property (nonatomic,strong)UIView *lineView;

@property (nonatomic, assign) BOOL isView1;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    // 创建子视图
    CGRect frame = CGRectMake(0, 20 + 44, KSCREEN_WIDTH, KSCREEN_HEIGHT - 44);
    _subView = [[UIView alloc] initWithFrame:frame];
    [self.view addSubview:_subView];
    
    // 设置分段控制器
    [self setUpSegmentedControl];
    
    _isView1 = YES;
    [self enterView1];
    
    // 添加下划线
    self.lineView = [[UIView alloc] initWithFrame:CGRectMake(0, 20+44, KSCREEN_WIDTH/3, 3)];
    self.lineView.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:_lineView];
}

#pragma mark 设置分段控制器
- (void)setUpSegmentedControl
{
    self.segmentedControl = [[UISegmentedControl alloc ]initWithItems:@[@"标题1",@"标题2",@"标题3"]];
    self.segmentedControl.frame = CGRectMake(0, 20, KSCREEN_WIDTH, 44);
    [self.view addSubview:self.segmentedControl];
    
    //设置控件的颜色
    self.segmentedControl.tintColor = COLOR_C(239, 239, 239, 1.0);
    
    //默认选中的索引
    self.segmentedControl.selectedSegmentIndex = 0;
    
    // 字体颜色
    NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor blackColor],NSForegroundColorAttributeName,[UIFont fontWithName:@"AppleGothic"size:14],NSFontAttributeName ,nil];
    NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor orangeColor],NSForegroundColorAttributeName,[UIFont fontWithName:@"AppleGothic"size:14],NSFontAttributeName ,nil];
    
    [self.segmentedControl setTitleTextAttributes:dict1 forState:UIControlStateNormal];
    [self.segmentedControl setTitleTextAttributes:dict2 forState:UIControlStateSelected];
    
    //设置在点击后是否恢复原样
    _segmentedControl.momentary = NO;
    
    // 点击事件
    [_segmentedControl addTarget:self action:@selector(controllerPressed:) forControlEvents:UIControlEventValueChanged];
}

#pragma mark - 点击事件
- (IBAction)controllerPressed:(UISegmentedControl *)sender
{
    self.lineView.hidden = NO;
    
    switch ([sender selectedSegmentIndex])
    {
        case 0:
        {
            CGRect lineFrame = self.lineView.frame;
            lineFrame.origin.x = 0;
            
            [UIView animateWithDuration:0.2 animations:^{
                self.lineView.frame = lineFrame;
            }];
            [self enterView1];
        }
            break;
        case 1:
        {
            CGRect frame = self.lineView.frame;
            frame.origin.x = KSCREEN_WIDTH/3;
            
            [UIView animateWithDuration:0.2 animations:^{
                
                self.lineView.frame = frame;
            }];
            
            [self enterView2];
        }
            break;
        case 2:
        {
            //给下划线 view 添加动画
            CGRect lineFrame = self.lineView.frame;
            lineFrame.origin.x = KSCREEN_WIDTH/3 * 2;
            
            [UIView animateWithDuration:0.2 animations:^{
                
                self.lineView.frame = lineFrame;
            }];
            [self enterView3];
        }
            break;
            
        default:
            break;
    }
    NSLog(@"Segment %ld selected
", (long)sender.selectedSegmentIndex);
}

- (void)enterView1
{
    _isView1 = YES;
    UIView *view1 = [[UIView alloc] initWithFrame:self.subView.bounds];
    [self.currentView removeFromSuperview];
    view1.backgroundColor = [UIColor yellowColor];
    self.currentView = view1;
    [self.subView addSubview:view1];
}

- (void)enterView2
{
    _isView1 = NO;
    UIView *view2 = [[UIView alloc] initWithFrame:self.subView.bounds];
    [self.currentView removeFromSuperview];
    view2.backgroundColor = [UIColor blueColor];
    self.currentView = view2;
    [self.subView addSubview:view2];
}

- (void)enterView3
{
    _isView1 = NO;
    UIView *view3 = [[UIView alloc] initWithFrame:self.subView.bounds];
    [self.currentView removeFromSuperview];
    view3.backgroundColor = [UIColor greenColor];
    self.currentView = view3;
    [self.subView addSubview:view3];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

最后的效果如下:

原文地址:https://www.cnblogs.com/boai/p/5011311.html