溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

UISegmentedControl

發(fā)布時間:2020-08-01 11:49:29 來源:網(wǎng)絡 閱讀:370 作者:ljl5125 欄目:開發(fā)技術

UISegmentedControl分段控件代替了桌面OS上的單選按鈕。不過它的選項個數(shù)非常有限,因為你的IOS設備屏幕有限。當我們需要使用選項非常少的單選按鈕時它很合適。這個控件的可定制性比較強。

一、創(chuàng)建

UISegmentedControl* mySegmentedControl = [[UISegmentedControl alloc]initWithItems:nil];

它不需要指定大小,高度默認為44,不能寫0,它不會自動擴充,最好寫44。不過我看到了另一個方法,這個方法可以設置Item的寬度:

 

  1. [mySegmentedControl setWidth:100 forSegmentAtIndex:0];//設置Item的寬度

二、屬性

 

  1. mySegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;

風格可以視使用的場合而定,有三種風格選擇,如下:

 

  1. typedef enum {

  2. UISegmentedControlStylePlain, // large plain 有灰邊的大白按鈕,適合偏好設置單元

  3. UISegmentedControlStyleBordered, // large bordered 黑邊的大白按鈕,適用于表格單元

  4. UISegmentedControlStyleBar, // small button/nav bar style. tintable 小按鈕,適合導航欄

  5. UISegmentedControlStyleBezeled, // large bezeled style. tintable

  6. } UISegmentedControlStyle;

如果你使用的是 UISegmentedControlStyleBar或者UISegmentedControlStyleBezeled 風格,還可以用空間的tintColor 屬性為整個控件設置渲染色彩:

 

  1. UIColor *myTint = [[ UIColor alloc]initWithRed:0.66 green:1.0 blue:0.77 alpha:1.0];

  2. mySegmentedControl.tintColor = myTint;

三、添加、刪除片段

每個分段控件的片段都是一個按鈕,其中包含一個標簽或圖片。

你需要在你的控件中為每個控件創(chuàng)建一個片段。只要屏幕放得下,就可以有許多片段,但用戶同一時刻只能選擇一個片段。

添加片段

  1. [mySegmentedControl insertSegmentWithTitle:@"First" atIndex:0 animated:YES];

  2. [mySegmentedControl insertSegmentWithTitle:@"Second" atIndex:2 animated:YES];

每個按鈕都被賦予一個索引,用這個索引可以排序以及標識。
你也可以添加一個含有圖像的片段,用inserSegmentWithImage

  1. [mySegmentedControl insertSegmentWithImage:[UIImage p_w_picpathNamed:@"pic"] atIndex:3 animated:YES];

刪除片段

  1. [mySegmentedControl removeSegmentAtIndex:0 animated:YES];//刪除一個片段

  2. [mySegmentedControl removeAllSegments];//刪除所有片段

四、片段標題

  1. [mySegmentedControl setTitle:@"ZERO" forSegmentAtIndex:0];//設置標題

  2. NSString* myTitle = [mySegmentedControl titleForSegmentAtIndex:1];//讀取標題

五、圖像每個分段也可以設置圖像

  1. [mySegmentedControl setImage:[UIImage p_w_picpathNamed:@"pic"] forSegmentAtIndex:1];//設置

  2. UIImage* myImage = [mySegmentedControl p_w_picpathForSegmentAtIndex:2];//讀取

注意:圖像不會自動調(diào)整大小,圖片多大就會原生地顯示多大,所以你要通知做圖的美工大小要精確。
六、選中分段分段控件的默認行為是,一旦按鈕被選中就一直保持,直到另外一個按鈕被選中為止。你可以改變這種默認的行為,變成按鈕按下后很快就自動釋放。將控件的momentary屬性設為YES:

  1. mySegmentedControl.momentary = YES;

注意:開啟這個功能后點觸片段不會更新selectedSegmentedIndex,因此也就無法通過這個屬性得到當前選取的片段。初始化默認片段默認情況下,除非你指定,否則不會有任何片段被選中。要設置 selectedSegmentedIndex 屬性:

  1. mySegmentedControl.selectedSegmentedIndex = 0;

七、顯示控件

  1. [parentView addSubview:mySegmentedControl];//添加到父視圖,比較常用。


  2. self.navigationItem.titleView = mySegmentedControl;//添加到導航欄

八、讀取控件通過 selectedSegmentedIndex 屬性可以讀取當前選中分段的值,這個值就是選中片段的索引號。

  1. int x = mySegmentedControl. selectedSegmentedIndex;

九、通知要接收片段選取的通知,可以用UIControl類的 addTarget 方法,為 UIControlEventValueChanged 事件添加一個動作:

  1. [mySegmentedControl addTarget:self action:@selector(selected:) forControlEvents:UIControlEventValueChanged];

只要選中了一個片段,你的動作方法就會被調(diào)用:

  1. -(void)selected:(id)sender{

  2. UISegmentedControl* control = (UISegmentedControl*)sender;

  3. switch (control.selectedSegmentIndex) {

  4. case 0:

  5. //

  6. break;

  7. case 1:

  8. //

  9. break;

  10. case 2:

  11. //

  12. break;


  13. default:

  14. break;

  15. }

  16. }

十示例代碼

4.09UISegmentedControl(3)

- (void)valueChange

{

if (2 ==_segmentedControl.selectedSegmentIndex) {

//如果選中的segment的下標為2selectedSegmentIndex)

[_segmentedControl setWidth:100forSegmentAtIndex:1];

//把下標為1segment寬度設為100

}else if(1 ==_segmentedControl.selectedSegmentIndex){

//如果選中的segment的下標為1

[_segmentedControl setWidth:[_segmentedControlwidthForSegmentAtIndex:0forSegmentAtIndex:1];

//把下標為1segment的寬度設為和下標為0segment寬度一樣的寬度

}else if(_segmentedControl.numberOfSegments - 1== _segmentedControl.selectedSegmentIndex){

//如果選中的下標為對象的總個數(shù)減1時,因為下標是從0開始的

[_segmentedControl insertSegmentWithTitle:[NSString stringWithFormat:@"%d",_segmentedControl.numberOfSegments + 1]atIndex:_segmentedControl.numberOfSegmentsanimated:YES];

//在下標為對象長度的地方插入一個segment,內(nèi)容為長度加1.

}

}

- (void)viewDidLoad

{

[super viewDidLoad];

_segmentedControl = [[UISegmentedControl alloc]initWithItems:

[NSArray arrayWithObjects:

@"1"@"2"@"3"@"4"@"5"nil]];

//創(chuàng)建一個UISegmentedControl對象:_segmentedControl,并初始化(initWithItems:(NSArray *)items

_segmentedControl.frame = CGRectMake(0100,32044);

//設置它的位置,雖然它的默認高為44,但也不能寫成0,最好寫成44

_segmentedControl.enabled = YES;

//讓這個分段控制器可以選擇,默認為YES

_segmentedControl.momentary = YES;

//momentary默認為NO,如果為YES,會立即消失被選中的狀態(tài)(藍色),但不會影響它產(chǎn)生的事件

_segmentedControl.segmentedControlStyle =UISegmentedControlStylePlain;

//設置它的風格,為普通的風格,默認的也是這個

_segmentedControl.tintColor = [UIColorredColor];

//設置它的色彩,不過這個色彩只對它的UISegmentedControlStyleBarUISegmentedControlStyleBezeled有用

_segmentedControl.selected = NO;

//決定接收者的狀態(tài),默認為NO(查下資料,不理解)

_segmentedControl.selectedSegmentIndex = 0;

//初始化被選中的segment為第1

[_segmentedControl addTarget:selfaction:@selector(valueChange)

forControlEvents:UIControlEventValueChanged];

//給對象綁定一個事件

[self.view addSubview:_segmentedControl];

//把對象加入到view

[_segmentedControl release];

//要記得把對象release

}


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI