iOS Segmented Control

SegmentedControl又被称作分段控制器,是IOS开发中经常用到的一个UI控件。

1通常是在单视图中使用,不做多视图之间的切换。实现视图中不同显示的快速切换,每一个分割表示一个不同的显示,这些显示往往是相关的,所谓的相关,可以理解成,功能一样,但是属性类别有差异。

比较常用的还有比如说,在一个视图中,不同的分割控制tableView加载不同的数据源。

2 它通常在整个屏幕的上部,不是必然,但大部分情况下是这样用。

3 一般是3到5个分割,超过5个的话每个分割的大小对于用户触碰的体验会很差。

4 任意时刻,只有一个分割是激活状态的。有点像单选按钮。


- (void)initSegmentedControl

{

NSArray*segmentedData = [[NSArrayalloc]initWithObjects:@"apple",@"orange",@"banana",nil];

UISegmentedControl*segmentedControl = [[UISegmentedControlalloc]initWithItems:segmentedData];

segmentedControl.frame= CGRectMake(10.0,20.0,300.0,30.0);

/*

这个是设置按下按钮时的颜色

*/

segmentedControl.tintColor= [UIColorcolorWithRed:49.0/256.0green:148.0/256.0blue:208.0/256.0alpha:1];

segmentedControl.selectedSegmentIndex=0;//默认选中的按钮索引

/*

下面的代码实同正常状态和按下状态的属性控制,比如字体的大小和颜色等

*/

NSDictionary*attributes = [NSDictionarydictionaryWithObjectsAndKeys:[UIFontboldSystemFontOfSize:12],NSFontAttributeName,[UIColorredColor], NSForegroundColorAttributeName,nilnil];

[segmentedControlsetTitleTextAttributes:attributesforState:UIControlStateNormal];

NSDictionary*highlightedAttributes = [NSDictionarydictionaryWithObject:[UIColorredColor]forKey:NSForegroundColorAttributeName];

[segmentedControlsetTitleTextAttributes:highlightedAttributesforState:UIControlStateHighlighted];

//设置分段控件点击相应事件

[segmentedControladdTarget:selfaction:@selector(doSomethingInSegment:)forControlEvents:UIControlEventValueChanged];

[self.viewaddSubview:segmentedControl];

}

每个功能注释都有清晰的描述,有一点要特别说明一下:

在ios7以前,segmentedcontrol有一个segmentedControlStyle 属性,通常都要设置,比如像下面这样:


/*

typedef enum {

UISegmentedControlStylePlain,

UISegmentedControlStyleBordered,

UISegmentedControlStyleBar,

UISegmentedControlStyleBezeled,

} UISegmentedControlStyle;

*/

segmentedControl.segmentedControlStyle= UISegmentedControlStyleBar;

但是这个在ios7之后,出于扁平化风格的考虑,这些style都不在有效了

我们再写一个按钮的事件响应函数,设置不同的背景图片,如下:


-(void)doSomethingInSegment:(UISegmentedControl*)Seg

{

NSInteger Index = Seg.selectedSegmentIndex;

switch(Index)

{

case0:

self.view.backgroundColor= [UIColorcolorWithPatternImage:[UIImageimageNamed:kSrcName(@"bg_apple_small.png")]];

break;

case1:

self.view.backgroundColor= [UIColorcolorWithPatternImage:[UIImageimageNamed:kSrcName(@"bg_orange_small.png")]];

break;

case2:

self.view.backgroundColor= [UIColorcolorWithPatternImage:[UIImageimageNamed:kSrcName(@"bg_banana_small.png")]];

break;

default:

break;

}

}

设置是否保持选中状态:

@property(nonatomic,getter=isMomentary) BOOL momentary;

注意:如果设置为YES,点击结束后,将不保持选中状态,默认为NO

获取标签个数:(只读)

@property(nonatomic,readonly) NSUInteger numberOfSegments;

设置标签宽度是否随内容自适应:

@property(nonatomic) BOOL apportionsSegmentWidthsByContent;

注意:如果设置为NO,则所有标签宽度一致,为最大宽度。

插入文字标签在index位置:

- (void)insertSegmentWithTitle:(NSString *)title atIndex:(NSUInteger)segment animated:(BOOL)animated

插入图片标签在index位置

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

注意:如果设置为0.0,则为自适应,默认为此设置。

根据索引获取标签宽度

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

设置和获取当前选中的标签索引

@property(nonatomic) NSInteger selectedSegmentIndex;

设置标签风格颜色

@property(nonatomic,retain) UIColor *tintColor;

注意:这个风格颜色会影响标签的文字和图片

设置特定状态下segment的背景图案

- (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics

获取背景图案

- (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

通过Attribute字符串属性字典设置标签标题

- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state

获取Attribute字符串属性字典

- (NSDictionary *)titleTextAttributesForState:(UIControlState)state

自行设置标签内容的偏移量

- (void)setContentPositionAdjustment:(UIOffset)adjustment forSegmentType:(UISegmentedControlSegment)leftCenterRightOrAlone barMetrics:(UIBarMetrics)barMetrics

注意:UIOffset为偏移量,这个结构体中又两个浮点数,分别表示水平量和竖直量;UISegmentedControlSegment类型参数是一个枚举

获取自定义偏移量

-(UIOffset)contentPositionAdjustmentForSegmentType:(UISegmentedControlSegment)leftCenterRightOrAlone

barMetrics:(UIBarMetrics)barMetrics

添加点击事件

[segmentedControl addTarget:self action:@selector(change:) forControlEvents:UIControlEventValueChanged];

你可能感兴趣的:(iOS Segmented Control)