【原創】(IOS開發)highlighted和selected兩種按鈕狀態原理摸索分享


 

      先科普以下常識:簡單來看,按鈕有點擊、非點擊2個狀態,點擊時系統會自動調用設置按鈕高亮狀態的方法(setHighlighted);非點擊時視為正常狀態(normal)。我們可以根據需要給不同狀態設置不同背景圖片,蘋果官方對按鈕狀態細致划分為3種:高亮(highlighted)、選中(selected)、普通(normal),如果編寫代碼時調用了方法(setSelected),按鈕會呈選中狀態(selected)。

 

3種按鈕狀態,蘋果官方命名為:

UIControlStateNorma(正常)、UIControlStateHighlighted(高亮)、UIControlStateSelected(選中)

 

接下來將2張按鈕背景圖片作為講解素材:

UIControlStateNorma 狀態選用灰色圖片TabBar

UIControlStateHighlighted 或 UIControlStateSelected 狀態選用金色圖片TabBarSel

 

      再次強調下,按鈕點擊時,一定會調用系統方法(setHighlighted:),並顯示為事先設置的高亮狀態圖片,如果之前沒設置,默認顯示效果為在原圖片下加一層灰色。點擊后只要沒松開手,就會保持highlighted狀態,松開手恢復顯示normal狀態。

現在看如下代碼:

// 設置按鈕圖片背景

NSString  *name = [NSString  stringWithFormat:@"TabBar"];

[button  setBackgroundImage:[UIImage  imageNamed:name]   forState:UIControlStateNormal]; 

        

NSString  *selectedName = [NSString  stringWithFormat:@"TabBarSel" ];

[button  setBackgroundImage : [UIImage  imageNamed: selectedName]   forState : UIControlStateHighlighted];// 第a行

 

// 監聽按鈕點擊

[button addTarget:self action:@selector(buttonClick:) forControlEvents: UIControlEventTouchDown]; // 第e行

 

// 點擊按鈕調用方法

- (void)buttonClick:(UIButton *)button

{

    button.selected = YES// 第b行

}

 

// 設置高亮狀態方法

- (void)setHighlighted:(BOOL)highlighted

{

   [super setHighlighted:highlighted]// 第c行

}

 

// 設置選中狀態方法

- (void)setSelected:(BOOL)selected

{

    [super setSelected:selected]// 第d行

}

 

代碼講解:

      貼出的代碼是精簡版,能傳達清楚意思即可。對a、b、c、d、e各行做不同程度的修改,運行后點擊按鈕會看到不同的效果。

  1.  注釋掉第b行,點擊按鈕不放,顯示高亮狀態金色圖片,松開恢復正常狀態的灰色圖片。這點容易理解。
  2.  注釋掉第b行,注釋掉第c行,點擊按鈕,按鈕無任何變化。因為[super setHighlighted:highlighted]是設置高亮狀態,注釋掉后,方法內並沒有做任何事,所以不變。
  3.  不做任何修改,點擊按鈕,按鈕在原圖片上加一層灰色。雖然調用了(setSelected)方法,但因為沒設置selected狀態下背景圖片,所以看到的只是變高亮的效果。
  4.  將第a行的UIControlStateHighlighted改為 UIControlStateSelected,點擊時為原圖片加一層灰色的高亮,松開手轉換為選中狀態的金色圖片。如果想去掉高亮狀態,注釋掉第c行即可,點擊直接變金色圖片。

注意:如果把第e行UIControlEventTouchDown改成UIControlEventTouchUpInside,應用在上述4種情況時會顯示效果會有一點差別,原因估計就在UIControlEventTouchDown是點擊了就調用方法buttonClick:,而UIControlEventTouchUpInside是在松開手后才調用,具體效果大家可以自己試試。


免責聲明!

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



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