http://blog.csdn.net/heng615975867/article/details/43527295
http://blog.csdn.net/gf771115/article/details/7683565
UISegmentedControl分段控件代替了桌面OS上的單選按鈕。不過它的選項個數非常有限,因為你的IOS設備屏幕有限。當我們需要使用選項非常少的單選按鈕時它很合適。
一:創建一個SegmentControl
//先創建一個數組用於設置標題 NSArray *arr = [[NSArray alloc]initWithObjects:@"輕拍",@"長按",@"清掃",@"旋轉",@"捏合",@"拖拽", nil]; //初始化UISegmentedControl //在沒有設置[segment setApportionsSegmentWidthsByContent:YES]時,每個的寬度按segment的寬度平分 UISegmentedControl *segment = [[UISegmentedControl alloc]initWithItems:arr]; //設置frame segment.frame = CGRectMake(0, 400, self.view.frame.size.width, 40); //管理Segment的內容 //設置下標為3的segment的標題 下標以0開始 iOS里的所有下標都是以0開始 [segment setTitle:@"大便" forSegmentAtIndex:3]; //設置下標為4的segment的圖片 [segment setImage:[UIImage imageNamed:@"maopiao"] forSegmentAtIndex:4]; //添加到主視圖 [self.view addSubview:segment];
運行如圖:
![]()
二:添加/刪除分頁Segments
[segment insertSegmentWithImage:[UIImage imageNamed:@"3"] atIndex:2 animated:YES]; //添加分頁,並設置圖片 [segment insertSegmentWithTitle:@"ddd" atIndex:0 animated:YES];//添加分頁,並設置標題 [segment numberOfSegments];//得到segment的數量 [segment removeAllSegments];//移出所有segment [segment removeSegmentAtIndex:2 animated:YES];//移出下標為2的segment segment.selectedSegmentIndex = 0;//選中第幾個segment 一般用於初始化時選中
三:管理Segment的行為和外觀
//默認為NO 當設置為YES時,當被選中后,一會兒后不顯示被選中狀態(最左邊的樣子),不選中狀態即下圖的右邊幾個按鈕一樣 segment.momentary = YES;
![]()
//設置segment的外觀和字體顏色 segment.tintColor = [UIColor redColor]; //segment.segmentedControlStyle = UISegmentedControlStyleBar;此屬性在ios7之后不再有任何效果 [segment setEnabled:NO]; //設置segment是否可用 此方法是其父類UIControl的方法 [segment setEnabled:NO forSegmentAtIndex:2];//設置下標為2的segment不可用 [segment setWidth:100 forSegmentAtIndex:2]; //這時下表為2的segment的寬度 [segment setContentOffset:CGSizeMake(10, 10) forSegmentAtIndex:2];//設置內容偏移 segment.apportionsSegmentWidthsByContent = YES; //是否根據segment的內容改變segment的寬度
![]()
//設置設置豎屏狀態下segments的背景圖片 [segment setBackgroundImage:[UIImage imageNamed:@"yellow"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
typedef enum {
UIBarMetricsDefault, //豎屏
UIBarMetricsLandscapePhone, 橫屏
} UIBarMetrics;
//設置Segment的字體 NSDictionary *dic = @{ //1.設置字體樣式:例如黑體,和字體大小 NSFontAttributeName:[UIFont fontWithName:@"Arial-BoldMT" size:20], //2.字體顏色 NSForegroundColorAttributeName:[UIColor grayColor] }; [segment setTitleTextAttributes:dic forState:UIControlStateNormal];
![]()
//當選中不同的segment時,
//當選中不同的segment時,會觸發不同的點擊事件 [segment addTarget:self action:@selector(selected:) forControlEvents:UIControlEventValueChanged]; -(void)selected:(id)sender{ UISegmentedControl* control = (UISegmentedControl*)sender; switch (control.selectedSegmentIndex) { case 0: NSLog(@"0"); break; case 1: NSLog(@"1"); break; case 2: NSLog(@"2"); break; default: NSLog(@"3"); break; } }
可以視使用的場合,有三種風格選擇,如下:
- typedef enum {
- UISegmentedControlStylePlain, // large plain 有灰邊的大白按鈕,適合偏好設置單元
- UISegmentedControlStyleBordered, // large bordered 黑邊的大白按鈕,適用於表格單元
- UISegmentedControlStyleBar, // small button/nav bar style. tintable 小按鈕,適合導航欄
- UISegmentedControlStyleBezeled, // large bezeled style. tintable
- } UISegmentedControlStyle;
如果你使用的是 UISegmentedControlStyleBar 風格,還可以用空間的 tintColor 屬性為整個控件設置渲染色彩:
- UIColor *myTint = [[ UIColor alloc]initWithRed:0.66 green:1.0 blue:0.77 alpha:1.0];
- mySegmentedControl.tintColor = myTint;
注意:開啟這個功能后點觸片段不會更新 selectedSegmentedIndex,因此也就無法通過這個屬性得到當前選取的片段。
