iOS:分段控件UISegmentedControl的詳細使用


分段控件:UISegmentedControl

 
功能:分段的控制、頁面的切換等。
 
介紹:當用戶輸入不僅僅是布爾值時,可使用分段控件(UISegmentedControl)。分段控件提供一欄按鈕(有時稱為按鈕欄),但只能激活其中一個按鈕。分段控件會導致用戶在屏幕上看到的內容發生變化。它們常用於在不同類別的信息之間選擇,或在不同的應用屏幕之間切換。下面介紹基本屬性和基本方法的使用。繼承自UIControl。
 
類型:

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

 

 當用圖像數組初始化時 :

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM