UISegmentedControl分段控件代替了桌面OS上的单选按钮。不过它的选项个数非常有限,因为你的IOS设备屏幕有限。当我们需要使用选项非常少的单选按钮时它很合适。这个控件的可定制性比较强。
一、创建
UISegmentedControl* mySegmentedControl = [[UISegmentedControl alloc]initWithItems:nil];
它不需要指定大小,高度默认为44,不能写0,它不会自动扩充,最好写44。不过我看到了另一个方法,这个方法可以设置Item的宽度:
- [mySegmentedControl setWidth:100 forSegmentAtIndex:0];//设置Item的宽度
- mySegmentedControl.segmentedControlStyle = UISegmentedControlStyleB
ar;
风格可以视使用的场合而定,有三种风格选择,如下:
- typedef enum {
- UISegmentedControlStyleP
lain, // large plain 有灰边的大白按钮,适合偏好设置单元
- UISegmentedControlStyleB
ordered, // large bordered 黑边的大白按钮,适用于表格单元
- UISegmentedControlStyleB
ar, // small button/nav bar style. tintable 小按钮,适合导航栏
- UISegmentedControlStyleB
ezeled, // large bezeled style. tintable
- } UISegmentedControlStyle;
- UIColor *myTint = [[ UIColor alloc]initWithRed:0.66 green:1.0 blue:0.77 alpha:1.0];
- mySegmentedControl.tintColor = myTint;
三、添加、删除片段
每个分段控件的片段都是一个按钮,其中包含一个标签或图片。
你需要在你的控件中为每个控件创建一个片段。只要屏幕放得下,就可以有许多片段,但用户同一时刻只能选择一个片段。
添加片段
- [mySegmentedControl insertSegmentWithTitle:@"First" atIndex:0 animated:YES];
- [mySegmentedControl insertSegmentWithTitle:@"Second" atIndex:2 animated:YES];
每个按钮都被赋予一个索引,用这个索引可以排序以及标识。
你也可以添加一个含有图像的片段,用inserSegmentWithImage
- [mySegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"pic"] atIndex:3 animated:YES];
- [mySegmentedControl removeSegmentAtIndex:0 animated:YES];//删除一个片段
- [mySegmentedControl removeAllSegments];//删除所有片段
- [mySegmentedControl setTitle:@"ZERO" forSegmentAtIndex:0];//设置标题
- NSString* myTitle = [mySegmentedControl titleForSegmentAtIndex:1];//读取标题
- [mySegmentedControl setImage:[UIImage imageNamed:@"pic"] forSegmentAtIndex:1];//设置
- UIImage* myImage = [mySegmentedControl imageForSegmentAtIndex:2];//读取
六、选中分段分段控件的默认行为是,一旦按钮被选中就一直保持,直到另外一个按钮被选中为止。你可以改变这种默认的行为,变成按钮按下后很快就自动释放。将控件的momentary属性设为YES:
- mySegmentedControl.momentary = YES;
- mySegmentedControl.selectedSegmentedIndex = 0;
- [parentView addSubview:mySegmentedControl];//添加到父视图,比较常用。
- 或
- self.navigationItem.titleView = mySegmentedControl;//添加到导航栏
- int x = mySegmentedControl. selectedSegmentedIndex;
- [mySegmentedControl addTarget:self action:@selector(selected:) forControlEvents:UIControlEventValueChang
ed];
- -(void)selected:(id)sender{
- UISegmentedControl* control = (UISegmentedControl*)sender;
- switch (control.selectedSegmentIndex) {
- case 0:
- //
- break;
- case 1:
- //
- break;
- case 2:
- //
- break;
-
- default:
- break;
- }
- }
十示例代码
4.09UISegmentedControl(3)
- (void)valueChange
{
//如果选中的segment的下标为2(selectedSegmentIndex)
//把下标为1的segment宽度设为100
//如果选中的segment的下标为1
//把下标为1的segment的宽度设为和下标为0的segment宽度一样的宽度
//如果选中的下标为对象的总个数减1时,因为下标是从0开始的
//在下标为对象长度的地方插入一个segment,内容为长度加1.
}
- (void)viewDidLoad
{
//创建一个UISegmentedControl对象:_segmentedControl,并初始化(initWithItems:(NSArray *)items)
//设置它的位置,虽然它的默认高为44,但也不能写成0,最好写成44
//让这个分段控制器可以选择,默认为YES
//momentary默认为NO,如果为YES,会立即消失被选中的状态(蓝色),但不会影响它产生的事件
ntrolStyle =UISegmentedControlStyleP
//设置它的风格,为普通的风格,默认的也是这个
//设置它的色彩,不过这个色彩只对它的UISegmentedControlStyleB
//决定接收者的状态,默认为NO(查下资料,不理解)
//初始化被选中的segment为第1段
//给对象绑定一个事件
//把对象加入到view
//要记得把对象release
}