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; } }
可以视使用的场合,有三种风格选择,如下:
- typedef enum {
- UISegmentedControlStylePlain, // large plain 有灰边的大白按钮,适合偏好设置单元
- UISegmentedControlStyleBordered, // large bordered 黑边的大白按钮,适用于表格单元
- UISegmentedControlStyleBar, // small button/nav bar style. tintable 小按钮,适合导航栏
- UISegmentedControlStyleBezeled, // large bezeled style. tintable
- } UISegmentedControlStyle;
如果你使用的是 UISegmentedControlStyleBar 风格,还可以用空间的 tintColor 属性为整个控件设置渲染色彩:
- UIColor *myTint = [[ UIColor alloc]initWithRed:0.66 green:1.0 blue:0.77 alpha:1.0];
- mySegmentedControl.tintColor = myTint;
注意:开启这个功能后点触片段不会更新 selectedSegmentedIndex,因此也就无法通过这个属性得到当前选取的片段。