iOS:分段控件UISegmentedControl的详细使用
分段控件:UISegmentedControl
typedef NS_ENUM(NSInteger, UISegmentedControlStyle) {
UISegmentedControlStylePlain, // 有灰色的大白按钮,适合偏好设置单元
UISegmentedControlStyleBordered, // 黑色边界的大白按钮,适用于表格单元
UISegmentedControlStyleBar, // 小按钮,适合导航栏
UISegmentedControlStyleBezeled, //斜角/斜边按钮
}
enum {
UISegmentedControlNoSegment = -1 // 不进行分段
};
typedef NS_ENUM(NSInteger, UISegmentedControlSegment) {
UISegmentedControlSegmentAny = 0, //所有标签都受影响
UISegmentedControlSegmentLeft = 1, //只有左边部分受到影响
UISegmentedControlSegmentCenter = 2, //只有中间部分受到影响
UISegmentedControlSegmentRight = 3, //只有右边部分受到影响
UISegmentedControlSegmentAlone = 4, //在只有一个标签时生效
};
属性:
@property(nonatomic) UISegmentedControlStyle segmentedControlStyle; //分段控件类型
@property(nonatomic,getter=isMomentary) BOOL momentary; //是否保持选中状态
@property(nonatomic,readonly) NSUInteger numberOfSegments; //标签数量
@property(nonatomic) BOOL apportionsSegmentWidthsByContent ; //设置标签宽度是否随内容自适应
@property(nonatomic) NSInteger selected ; //被选中的标签的索引
@property(nonatomic,retain) UIColor *tintColor; //控件颜色
方法:
※初始化方法:传入的数组内容可以是字符串也可以是图像
- (instancetype)initWithItems:(NSArray *)items;
※在指定索引处插入标签标题
- (void)insertSegmentWithTitle:(NSString *)title atIndex:(NSUInteger)segment animated:(BOOL)animated;
※在指定索引处插入标签图像
- (void)insertSegmentWithImage:(UIImage *)image atIndex:(NSUInteger)segment animated:(BOOL)animated;
※移除指定索引处的标签
- (void)removeSegmentAtIndex:(NSUInteger)segment animated:(BOOL)animated;
※移除所有的标签
- (void)removeAllSegments;
※设置指定索引处的标签标题
- (void)setTitle:(NSString *)title forSegmentAtIndex:(NSUInteger)segment;
※获取指定索引处的标签标题
- (NSString *)titleForSegmentAtIndex:(NSUInteger)segment;
※设置指定索引处的标签图像
- (void)setImage:(UIImage *)image forSegmentAtIndex:(NSUInteger)segment;
※获取指定索引处的标签图像
- (UIImage *)imageForSegmentAtIndex:(NSUInteger)segment;
※设置指定索引处标签的宽度
- (void)setWidth:(CGFloat)width forSegmentAtIndex:(NSUInteger)segment;
※ 获取指定索引处的标签的宽度
- (CGFloat)widthForSegmentAtIndex:(NSUInteger)segment;
※设置指定索引处标签内容偏移量
- (void)setContentOffset:(CGSize)offset forSegmentAtIndex:(NSUInteger)segment;
※获取指定索引处标签内容的偏移量
- (CGSize)contentOffsetForSegmentAtIndex:(NSUInteger)segment;
※设置指定索引处标签是否有效(默认有效)
- (void)setEnabled:(BOOL)enabled forSegmentAtIndex:(NSUInteger)segment;
※获取指定索引处的标签的有效性
(BOOL)isEnabledForSegmentAtIndex:(NSUInteger)segment;
※设置设定状态下segment的背景图像
- (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics;
※获取设定的状态下的segment的背景图像
- (UIImage *)backgroundImageForState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics ;
※设置标签之间分割线的图像
- (void)setDividerImage:(UIImage *)dividerImage forLeftSegmentState:(UIControlState)leftState rightSegmentState:(UIControlState)rightState barMetrics:(UIBarMetrics) barMetrics ;
※获取标签之间分割线的图像
- (UIImage *)dividerImageForLeftSegmentState:(UIControlState)leftState rightSegmentState:(UIControlState)rightState barMetrics:(UIBarMetrics)barMetrics ;
※通过attributes字典设置设定的状态下标签的标题
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state ;
※获取attributes字典
- (NSDictionary *)titleTextAttributesForState:(UIControlState)state;
※自行设置标签内容的偏移量
- (void)setContentPositionAdjustment:(UIOffset)adjustment forSegmentType:(UISegmentedControlSegment)leftCenterRightOrAlone barMetrics:(UIBarMetrics)barMetrics ;
※获取自定义的标签内容偏移量
- (UIOffset)contentPositionAdjustmentForSegmentType:(UISegmentedControlSegment)leftCenterRightOrAlone barMetrics:(UIBarMetrics)barMetrics ;
具体举例:在ViewController类的- (void)viewDidLoad { [super viewDidLoad];...}方法中添加代码如下:
//1.设置标签内容数组(一个为字符串数组、一个为图像数组)
1 //设置标签单元数组,内容全为文字 2 NSArray *items = @[@"图片",@"视频",@"音乐",@"美食"];
1 //设置标签单元数组,内容全为图像 2 NSArray *images = @[[UIImage imageNamed:@"1.png"],[UIImage imageNamed:@"2.png"],[UIImage imageNamed:@"3.png"]];
//2、创建分段控件实例并设置位置frame
//创建分段控件实例 UISegmentedControl *sc = [[UISegmentedControl alloc]initWithItems:items]; //用文字数组初始化
//UISegmentedControl *sc = [[UISegmentedControl alloc]initWithItems:images]; //用图像数组初始化
//设置位置 sc.frame = CGRectMake(60, 120, 200, 50);
//3、设置风格(注意:版本升级后,该属性不在有效)
//设置风格(iOS7.0以后,这个属性不在起任何作用了) //sc.segmentedControlStyle = UISegmentedControlStyleBordered;
//4、设置一开始就选中的标签
//设置选中的标签 sc.selectedSegmentIndex = 2;
//5、添加控件事件
//添加控件事件 [sc addTarget:self action:@selector(segmentedChanged:) forControlEvents:UIControlEventValueChanged];
//6、将控件加到视图中
//将控件添加到视图中 [self.view addSubview:sc];
触发控件事件:
#pragma mark -segmentedChanged: 触发控件事件
-(void)segmentedChanged:(UISegmentedControl*)sender { NSLog(@"sender: %ld",sender.selectedSegmentIndex); //输出当前的索引值 }
演示结果如下:
当用字符串文字数组初始化,并且没有触发事件时:当前选中的索引是2
当触发事件时,当前选中的索引是:0
输出结果:
2015-09-30 23:07:51.026 分段控件UISegmentedControl[5335:319520] sender: 0
当用图像数组初始化时 :