分段控件: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
當用圖像數組初始化時 :