自定義控件繼承UIButton注意點
-
自定義控件繼承UIButton
- 有時候我們顯示的界面需要UIImageView和UILabel的結合,這個時候我們就可以通過繼承UIButton來實現(xiàn)功能
- 但是注意點:通常我們在.h里面也得聲明模型數據,然后在.m里面重寫set方法來給UIButton里面的UIImageView和UILabel的數據
- 這里以前犯的一個錯誤秀睛,就是像以前設置UIImageView和UILabel對象的時候镊掖,直接就.image或者.text 直接進行賦值
- 糾正設置按鈕的文字、圖片、背景圖片等都是分狀態(tài)的锋八,所以挂捅,得通過調用相應的方法來進行設置數據芹助,否則,可能看不到數據界面闲先,不顯示界面
UIButton的界面狀態(tài)
- 往storyboard中拖拽一個UIButton状土,比如我的示例圖片QQ圖片尺寸是36*36,我把它設置給UIButton屬性中的Image,只要UIButton的尺寸大于等于QQ圖片尺寸伺糠,那么QQ圖片尺寸蒙谓,不會進行縮放,在沒有文字的情況下训桶,默認是顯示在UIButton的正中間累驮,用面板里面的模式去設置,對QQ圖片沒有任何影響舵揭;把它設置給UIButton屬性中的Background谤专,只要UIButton的圖片尺寸大于QQ圖片的尺寸,那么午绳,QQ圖片會進行縮放置侍,在storyboard面板中,如圖:
改變里面的模式,對QQ圖片的尺寸沒有任何影響蜡坊,在Background的條件下杠输,UIButton的尺寸比QQ圖片小,QQ圖片也會進行縮放秕衙,調整面板里面的模式蠢甲,對QQ圖片沒有任何影響
- 把它依然設置給UIButton屬性中的Image,UIButton的尺寸小于QQ圖片的尺寸,那么QQ圖片也會進行縮放据忘,會變形鹦牛,調整面板里面的模式,對QQ圖片沒有任何影響若河;但是能岩,如果我通過代碼的方式:
// 創(chuàng)建UIButton對象
UIButton *btn = [[UIButton alloc] init];
btn.imageView.contentMode = UIViewContentModeScaleAspectFit;
btn.frame = CGRectMake(20, 20, 40, 20);
// 設置背景色
btn.backgroundColor = [UIColor redColor];
// 設置文字
[btn setTitle:@"hehe" forState:UIControlStateNormal];
[btn setTitle:@"haha" forState:UIControlStateHighlighted];
// 設置小圖片
[btn setImage:[UIImage imageNamed:@"QQ"] forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:@"QQ"] forState:UIControlStateHighlighted];
// 添加到view
[self.view addSubview:btn];
那么,btn.imageView.contentMode = UIViewContentModeScaleAspectFit;這句代碼就起到一個作用萧福,里面的圖片跟著按鈕一起收縮的時候拉鹃,會進行等比例縮放,并且排布到按鈕中間