西贝了爷  

http://blog.csdn.net/heng615975867/article/details/43527295

http://blog.csdn.net/gf771115/article/details/7683565

 

UISegmentedControl分段控件代替了桌面OS上的单选按钮。不过它的选项个数非常有限,因为你的IOS设备屏幕有限。当我们需要使用选项非常少的单选按钮时它很合适。

 一:创建一个SegmentControl

    //先创建一个数组用于设置标题
    NSArray *arr = [[NSArray alloc]initWithObjects:@"轻拍",@"长按",@"清扫",@"旋转",@"捏合",@"拖拽", nil];
    
    //初始化UISegmentedControl
    //在没有设置[segment setApportionsSegmentWidthsByContent:YES]时,每个的宽度按segment的宽度平分
    UISegmentedControl *segment = [[UISegmentedControl alloc]initWithItems:arr];
    
    //设置frame
    segment.frame = CGRectMake(0, 400, self.view.frame.size.width, 40);
    
    //管理Segment的内容
    //设置下标为3的segment的标题 下标以0开始 iOS里的所有下标都是以0开始
    [segment setTitle:@"大便" forSegmentAtIndex:3];
    
    //设置下标为4的segment的图片
    [segment setImage:[UIImage imageNamed:@"maopiao"] forSegmentAtIndex:4];
    
    //添加到主视图
    [self.view addSubview:segment];

运行如图:    

    

二:添加/删除分页Segments  

    [segment insertSegmentWithImage:[UIImage imageNamed:@"3"] atIndex:2 animated:YES]; //添加分页,并设置图片
    [segment insertSegmentWithTitle:@"ddd" atIndex:0 animated:YES];//添加分页,并设置标题
    [segment numberOfSegments];//得到segment的数量
    [segment removeAllSegments];//移出所有segment
    [segment removeSegmentAtIndex:2 animated:YES];//移出下标为2的segment
    segment.selectedSegmentIndex = 0;//选中第几个segment 一般用于初始化时选中

三:管理Segment的行为和外观   

    //默认为NO 当设置为YES时,当被选中后,一会儿后不显示被选中状态(最左边的样子),不选中状态即下图的右边几个按钮一样
    segment.momentary = YES;

    

 

  //设置segment的外观和字体颜色
    segment.tintColor = [UIColor redColor];
    //segment.segmentedControlStyle = UISegmentedControlStyleBar;此属性在ios7之后不再有任何效果
    
    [segment setEnabled:NO]; //设置segment是否可用 此方法是其父类UIControl的方法
    [segment setEnabled:NO forSegmentAtIndex:2];//设置下标为2的segment不可用
    [segment setWidth:100 forSegmentAtIndex:2]; //这时下表为2的segment的宽度
    [segment setContentOffset:CGSizeMake(10, 10) forSegmentAtIndex:2];//设置内容偏移
    segment.apportionsSegmentWidthsByContent = YES; //是否根据segment的内容改变segment的宽度

    

 

    //设置设置竖屏状态下segments的背景图片
    [segment setBackgroundImage:[UIImage imageNamed:@"yellow"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

typedef enum {
    UIBarMetricsDefault,  //竖屏
    UIBarMetricsLandscapePhone,  横屏
} UIBarMetrics;

 

    //设置Segment的字体
    NSDictionary *dic = @{
                          //1.设置字体样式:例如黑体,和字体大小
                          NSFontAttributeName:[UIFont fontWithName:@"Arial-BoldMT" size:20],
                          //2.字体颜色
                          NSForegroundColorAttributeName:[UIColor grayColor]
                          };
    
    [segment setTitleTextAttributes:dic forState:UIControlStateNormal];

    

 

//当选中不同的segment时,

//当选中不同的segment时,会触发不同的点击事件
[segment addTarget:self action:@selector(selected:) forControlEvents:UIControlEventValueChanged];
    

-(void)selected:(id)sender{
    UISegmentedControl* control = (UISegmentedControl*)sender;
    switch (control.selectedSegmentIndex) {
        case 0:
            NSLog(@"0");
            break;
        case 1:
            NSLog(@"1");
            break;
        case 2:
            NSLog(@"2");
            break;
            
        default:
            NSLog(@"3");
            break;
    }
}

 

 

可以视使用的场合,有三种风格选择,如下:

  1. typedef enum {  
  2.     UISegmentedControlStylePlain,     // large plain 有灰边的大白按钮,适合偏好设置单元   
  3.     UISegmentedControlStyleBordered,  // large bordered 黑边的大白按钮,适用于表格单元   
  4.     UISegmentedControlStyleBar,       // small button/nav bar style. tintable 小按钮,适合导航栏   
  5.     UISegmentedControlStyleBezeled,   // large bezeled style. tintable   
  6. } UISegmentedControlStyle;  

如果你使用的是 UISegmentedControlStyleBar 风格,还可以用空间的 tintColor 属性为整个控件设置渲染色彩:

  1. UIColor *myTint = [[ UIColor alloc]initWithRed:0.66 green:1.0 blue:0.77 alpha:1.0];  
  2.    mySegmentedControl.tintColor = myTint;  

注意:开启这个功能后点触片段不会更新 selectedSegmentedIndex,因此也就无法通过这个属性得到当前选取的片段。

 

posted on 2016-05-27 15:39  西贝了爷  阅读(15606)  评论(1编辑  收藏  举报