iOS——UISegmentedControl 的用法

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;
    }
}

你可能感兴趣的:(ios,控件)