UIButton的用法

UIButton作為最常用的控件之一,其繼承了父類UIView的屬性和方法,同時由于其繼承了UIControl使其與UIView區(qū)別開來,可以接收touch事件。

UIButton常用方法

1)UIButton的創(chuàng)建

UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
button.titleLabel.text = @"button";
button.backgroundColor = [UIColor redColor];
[self.view addSubview:button];

效果如下圖,可以看到button的title并沒有顯示出來,why?


button設置title效果圖

于是默默的打印了button...

<UIButtonLabel: 0x7fccf9725290; frame = (0 0; 0 0);
text = 'button'; hidden = YES; opaque = NO; userInteractionEnabled = NO;
layer = <_UILabelLayer: 0x7fccf97258e0>>

可以看到直接用點語法設置title時button上的label frame為0,且hidden屬性為YES,title自然不能顯示,需要改用set方法進行設置。

UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
[button setTitle:@"button" forState:UIControlStateNormal];
button.backgroundColor = [UIColor redColor];
[self.view addSubview:button];

效果如下圖,可以看到button的title顯示出來了。

button設置title效果圖

此時button上的label為:

<UIButtonLabel: 0x7fc90243b660; frame = (50 50; 0 0);
text = 'button'; opaque = NO;
userInteractionEnabled = NO;
layer = <_UILabelLayer: 0x7fc90243bcb0>>

2)設置按鈕圖片
首先我嘗試了這樣的方法:

button.imageView.image = [UIImage imageNamed:@"minion"];

很遺憾,圖片并未顯示,于是很自然的改用set方法

[button setImage:[UIImage imageNamed:@"minion"] forState:UIControlStateNormal];

效果如下圖,button的圖片顯示出來了,而且圖片縮放到了button的大小。

button設置圖片效果圖

3)設置按鈕圖片邊距
很多時候并不想圖片直接占滿整個button,而是希望在上下左右留出一定邊距。這需要用到imageEdgeInsets屬性:

button.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10);

效果如下圖,button圖片上左下右的邊距都設置成了10,當然如果是背景圖則無效。

button設置圖片邊距效果圖

4)button的幾個狀態(tài)

  • UIControlStateNormal
    正常狀態(tài),默認狀態(tài),既不是selected狀態(tài)也不是高亮狀態(tài)的一種狀態(tài)。
  • UIControlStateHighlighted
    高亮狀態(tài),即按鈕被點擊且手還未離開按鈕的一個狀態(tài)。
  • UIControlStateSelected
    選中狀態(tài),不是字面上理解的按鈕被點擊選中,而是一種通過過改變其selected屬性來改變的一種狀態(tài)。
  • UIControlStateDisabled
    不可用狀態(tài),即按鈕此時處于灰色不能響應點擊的狀態(tài)。

我們時常有這樣一個需求:當點擊某個按鈕時改變其顯示的圖片,當再點擊時又變回原來的圖片。這就可以通過改變按鈕的正常狀態(tài)和選中狀態(tài)切換來實現(xiàn)。

- (void)viewDidLoad {
[super viewDidLoad];
[self.btn setImage:[UIImage imageNamed:@"duck"] forState:UIControlStateNormal];
[self.btn setImage:[UIImage imageNamed:@"pinguin"] forState:UIControlStateSelected];
}
- (IBAction)click:(UIButton *)sender {
sender.selected = !sender.selected;
}
正常選中狀態(tài)切換效果圖

從上面的動圖可以看到每次點擊,圖片切換了,但是當點擊按鈕且離開按鈕前顯示了圖片默認的高亮狀態(tài)圖,感覺有些突兀,想直接切換不要顯示高亮狀態(tài)的圖片。有沒有什么方法可以使狀態(tài)切換由normal->highlighted->selected跳過highlighted變?yōu)閚ormal->selected呢?那就把正常狀態(tài)到高亮設置成一樣,把選中狀態(tài)到高亮狀態(tài)的圖片設置成一樣不就沒有突變了么。

- (void)viewDidLoad {
[super viewDidLoad];
[self.btn setImage:[UIImage imageNamed:@"duck"] forState:UIControlStateHighlighted];
[self.btn setImage:[UIImage imageNamed:@"duck"] forState:UIControlStateNormal];
[self.btn setImage:[UIImage imageNamed:@"pinguin"] forState:UIControlStateSelected];
//選中狀態(tài)下的高亮圖片
[self.btn setImage:[UIImage imageNamed:@"pinguin"] forState:UIControlStateSelected|UIControlStateHighlighted];
}
正常選中狀態(tài)切換效果圖

可以看到由normal->highlighted的高亮狀態(tài)還在,太惡心了,看來只有在子類重寫button的setHighted來屏蔽系統(tǒng)高亮方法了。其實最簡單做法是讓button的類型Type由System改為Custom。效果如下:狀態(tài)切換一點也不鬧心了,不過系統(tǒng)的東西都沒了,tintColor什么的都沒用了。

Custom button狀態(tài)切換效果圖

PS: I am xinghun who is on the road.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容