導(dǎo)讀
按鈕是應(yīng)用中最常見(jiàn)的,最基本的一個(gè)控件。
按鈕的樣式多種多樣随闽,系統(tǒng)默認(rèn)樣式為左右結(jié)構(gòu)肝谭,圖片在左邊攘烛,文字在右邊。系統(tǒng)按鈕完全無(wú)法滿足開(kāi)發(fā)的需求鼠次,我們只能自己定制出想要的樣式靖秩。
在這里分享一個(gè)自定義按鈕沟突,文字圖片位置隨意定制的demo給大家捕传。源碼地址:https://github.com/HelloYeah/YLButton
歡迎Star庸论,贈(zèng)人玫瑰职辅,手有余香!聂示!
酷我音樂(lè)中的部分按鈕
- 圖片文字,上下左右域携,C2 * C2 = 4,文字在圖片內(nèi)部的按鈕,在酷我音樂(lè)中沒(méi)找到鱼喉,但實(shí)際上也是有的秀鞭,光布局樣式至少有5種。每種布局樣式扛禽,文字圖片大小尺寸位置也不盡相同锋边。
實(shí)現(xiàn)方法
重寫(xiě)下面兩個(gè)方法,返回正確的布局即可编曼。
- (CGRect)titleRectForContentRect:(CGRect)contentRect;
- (CGRect)imageRectForContentRect:(CGRect)contentRect;
雖然可以實(shí)現(xiàn),每個(gè)按鈕都重寫(xiě)一遍掐场,一個(gè)項(xiàng)目中那需要自定義多個(gè)按鈕往扔,每個(gè)都算一下布局贩猎。這是有多無(wú)聊和痛苦,有什么好的辦法可以一勞永逸瓤球,適用所有的樣式嗎融欧?答案是肯定的!
先上效果圖
外界調(diào)用
1.xib創(chuàng)建
2.純代碼創(chuàng)建
//左右結(jié)構(gòu)卦羡,圖片在左邊噪馏,文字在右邊。
{
YLButton * searchBtn = [YLButton buttonWithType:UIButtonTypeCustom];
[searchBtn setImage:[UIImage imageNamed:@"search"] forState:UIControlStateNormal];
[searchBtn setTitle:@"搜索按鈕圖片在左邊" forState:UIControlStateNormal];
searchBtn.titleLabel.font = [UIFont systemFontOfSize:13];
[searchBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[searchBtn setTitleColor:[UIColor orangeColor] forState:UIControlStateHighlighted];
searchBtn.imageRect = CGRectMake(10, 10, 20, 20);
searchBtn.titleRect = CGRectMake(35, 10, 120, 20);
[self.view addSubview:searchBtn];
searchBtn.frame = CGRectMake(SCREEN_WIDTH * 0.5 - 80, 250, 160, 40);
searchBtn.backgroundColor = [UIColor colorWithRed:255/255.0 green:242/255.0 blue:210/255.0 alpha:1];
}
實(shí)現(xiàn)原理
1.先看.h文件
#import <UIKit/UIKit.h>
@interface YLButton : UIButton
@property (nonatomic,assign) CGRect titleRect;
@property (nonatomic,assign) CGRect imageRect;
@end
2.實(shí)現(xiàn).m文件
@implementation YLButton
- (CGRect)titleRectForContentRect:(CGRect)contentRect{
if (!CGRectIsEmpty(self.titleRect) && !CGRectEqualToRect(self.titleRect, CGRectZero)) {
return self.titleRect;
}
return [super titleRectForContentRect:contentRect];
}
- (CGRect)imageRectForContentRect:(CGRect)contentRect{
if (!CGRectIsEmpty(self.imageRect) && !CGRectEqualToRect(self.imageRect, CGRectZero)) {
return self.imageRect;
}
return [super imageRectForContentRect:contentRect];
}
@end
總結(jié)
有沒(méi)有一種快刀斬亂麻的感覺(jué)绿饵,有沒(méi)有感覺(jué)很好用欠肾,歡迎Star。
源碼地址:https://github.com/HelloYeah/YLButton
補(bǔ)充
12月5日 補(bǔ)充實(shí)現(xiàn)分類拟赊。源碼請(qǐng)轉(zhuǎn)GitHub