UISegmentedControl是iOS中的分段控件。
//Segmented 分段的、分割
每个segment都能被点击,相当于集成了若干个button。
通常我们会点击不同的segment来切换不同的view。
//分配间距方法,默认最长,每个都是最长的。
self.segmentedcontrol=[[UISegmentedControl alloc]initWithItems:@[@"爽",@"爽啊",@"爽"]];
//设置大小位置,(父类的方法)
_segmentedcontrol.frame=CGRectMake(0, self.frame.origin.y+30, self.frame.size.width-50, 30);
// 设置点击后是否恢复原样,默认是NO,不恢复.(是否保持选中状态)
_segmentedcontrol.momentary=YES;
// 获取标签个数
NSInteger number=_segmentedcontrol.numberOfSegments;
NSLog(@"个数:%ld",(long)number);
//设置标签宽度是否随内容自适应( 注意:如果设置为NO,则所有标签宽度一致,为最大宽度)
_segmentedcontrol.apportionsSegmentWidthsByContent=YES;
// 设置和获取当前选中的标签索引
// index 超出范围,不设置,不报错
_segmentedcontrol.selectedSegmentIndex=2;
NSInteger index=_segmentedcontrol.selectedSegmentIndex;
NSLog(@"index=%ld",(long)index);//此时只能输出默认的选中项,在点击事件中可实现点击输出。
// 渲染颜色:注意:这个风格颜色会影响标签的文字和图片
_segmentedcontrol.tintColor=[UIColor greenColor];
[self addSubview:_segmentedcontrol];
// 插入文字标签在index位置:
// 参数animated 是否是动画模式, 位置index ,放到指定位置,相对于上一个来说。并不是放上之后在第几个位置,
[_segmentedcontrol insertSegmentWithTitle:@"马上" atIndex:0 animated:YES];
//插入图片标签在index位置
[_segmentedcontrol insertSegmentWithImage:[[UIImage imageNamed:@"cat"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ] atIndex:3 animated:YES];
/*
typedef NS_ENUM(NSInteger, UIImageRenderingMode) {
UIImageRenderingModeAutomatic, // Use the default rendering mode for the context where the image is used
UIImageRenderingModeAlwaysOriginal, // Always draw the original image, without treating it as a template, 总是把原始图像,没有把它作为一个模板
UIImageRenderingModeAlwaysTemplate, // Always draw the image as a template image, ignoring its color information,总是把图像作为模板图像,忽视它的颜色信息
} NS_ENUM_AVAILABLE_IOS(7_0);
*/
// 根据索引删除某个标签,坐标超过范围,不删除。
[_segmentedcontrol removeSegmentAtIndex:2 animated:YES];
// 全部删除
[_segmentedcontrol removeAllSegments];
// 根据下标重设标签标题下标超出范围,崩溃
[_segmentedcontrol setTitle:@"在路上" forSegmentAtIndex:2];,,
// 根据下标获得标题,下标超出范围,崩溃
NSString * title=[_segmentedcontrol titleForSegmentAtIndex:1];
NSLog(@"%@",title);
// 根据下标设置标签图片 :注意:标题的图片只能设置一个
[_segmentedcontrol setImage:[[UIImage imageNamed:@"ear"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forSegmentAtIndex:0];
// 获取标签图片
UIImage * image=[_segmentedcontrol imageForSegmentAtIndex:0];
NSLog(@"%@",image);
// 根据索引设置相应标签宽度:注意:如果设置为0.0,则为自适应,默认为此设置
[_segmentedcontrol setWidth:30 forSegmentAtIndex:0];
CGFloat windth=[_segmentedcontrol widthForSegmentAtIndex:0];
NSLog(@"%f",windth);
//设置标签内容的偏移量 :注意:这个偏移量指的是标签的文字或者图片
CGSize size=CGSizeMake(200, 100);
[_segmentedcontrol setContentOffset:size forSegmentAtIndex:1];
// 根据索引设置标签是否有效,(默认有效)NO 为不可选。
[_segmentedcontrol setEnabled:NO forSegmentAtIndex:1];
// 根据索引获取当前标签是否有效
BOOL enabled=[_segmentedcontrol isEnabledForSegmentAtIndex:1];
NSLog(@"%d",enabled);
// 设置特定状态下segment的背景图案
[_segmentedcontrol setBackgroundImage:[UIImage imageNamed:@"img"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
// 对应特定状态下segment的背景图案
UIImage *image=[_segmentedcontrol backgroundImageForState:UIControlStateNormal barMetrics:UIBarMetricsCompact];
NSLog(@"%@",image);
// 设置标签之间分割线的图案
[_segmentedcontrol setDividerImage:[UIImage imageNamed:@"label"] forLeftSegmentState:UIControlStateHighlighted rightSegmentState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
// 对应的取出标签之间分割线的图案
UIImage *image1=[_segmentedcontrol dividerImageForLeftSegmentState:UIControlStateHighlighted rightSegmentState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
NSLog(@"%@",image1);
// // 通过Attribute字符串属性字典设置标签标题
// NSDictionary * dictionary=[[NSDictionary alloc]initWithObjectsAndKeys:@"key1",@"value1",@"key2",@"value2",@"key3",@"value3", nil];
// [_segmentedcontrol setTitleTextAttributes:dictionary forState:UIControlStateNormal];
UISegmentedControl 监听事件:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// 添加监听事件
// [self.rootView.segmentedcontrol addTarget:self action:@selector(segmentedcontrolAction:) forControlEvents:UIControlEventValueChanged];
}
-(void)segmentedcontrolAction:(UISegmentedControl *)sender{
NSUInteger index=sender.selectedSegmentIndex;
switch (index) {
case 0:
NSLog(@"第一个选项被选中");
break;
case 1:
NSLog(@"第二个选项被选中");
break;
case 2:
NSLog(@"第三个选项被选中");
break;
default:
break;
}
}