創(chuàng)建分類按鈕

假設(shè)需求是這樣的

分類按鈕.png
controller里面創(chuàng)建topView昵仅,一看ZFBHomeTopView就知道封裝了睦霎。梢卸。。
 ZFBHomeTopView *topView = [[ZFBHomeTopView alloc] init];
    topView.backgroundColor = [UIColor colorWithHex:0x2e90d4];
    [self.view addSubview:topView];
    
    [topView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.top.right.offset(0);
        make.height.offset(115);
    }];
精彩部分代碼來了
#import "ZFBHomeTopView.h"
#import "NSAttributedString+Additon.h"
#import "Masonry.h"

@implementation ZFBHomeTopView

// 重寫初始化方法在此方法中創(chuàng)建及添加子控件
- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        
        [self setupUI];
    }
    return self;
}

- (void)setupUI {
    // 1.掃一掃
   UIButton *scanBtn = [self makeHomeTopViewWithButtonImageName:@"home_scan" andButtonWithTitle:@"掃一掃"];
    
    UIButton *payBtn = [self makeHomeTopViewWithButtonImageName:@"home_pay" andButtonWithTitle:@"付款"];
    
    UIButton *cardBtn = [self makeHomeTopViewWithButtonImageName:@"home_card" andButtonWithTitle:@"卡券"];
    
    UIButton *xiuxiuBtn = [self makeHomeTopViewWithButtonImageName:@"home_xiu" andButtonWithTitle:@"咻一咻"];
    
    [self.subviews mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.bottom.offset(0);
    }];
    
    [scanBtn mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.offset(0);
    }];
    
    [payBtn mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(scanBtn.mas_right).offset(0);
        make.width.equalTo(scanBtn.mas_width).offset(0);
    }];
    
    [cardBtn mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(payBtn.mas_right).offset(0);
        make.width.equalTo(payBtn.mas_width).offset(0);
    }];

    [xiuxiuBtn mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(cardBtn.mas_right).offset(0);
        make.width.equalTo(cardBtn.mas_width).offset(0);
        make.right.offset(0);
    }];
    
}

- (UIButton *)makeHomeTopViewWithButtonImageName:(NSString *)imageNmae  andButtonWithTitle:(NSString *)title {
    
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
    
    NSAttributedString *attrStr = [NSAttributedString imageTextWithImage:[UIImage imageNamed:imageNmae] imageWH:35 title:title fontSize:15 titleColor:[UIColor whiteColor] spacing:8];
    // 設(shè)置按鈕換行
    btn.titleLabel.numberOfLines = 0;
    // 設(shè)置按鈕中的文字居中顯示
    btn.titleLabel.textAlignment = NSTextAlignmentCenter;
    
    [btn setAttributedTitle:attrStr forState:UIControlStateNormal];
    
    [self addSubview:btn];
    
    return btn;
}
@end

這里面的按鈕通過圖文混排來實(shí)現(xiàn)副女,通過創(chuàng)建分類NSAttributedString 蛤高,看代碼你就恍然大悟了。

h文件
//  NSAttributedString+CZAdditon.h

#import <UIKit/UIKit.h>

@interface NSAttributedString (Additon)

/// 使用圖像和文本生成上下排列的屬性文本
///
/// @param image      圖像
/// @param imageWH    圖像寬高
/// @param title      標(biāo)題文字
/// @param fontSize   標(biāo)題字體大小
/// @param titleColor 標(biāo)題顏色
/// @param spacing    圖像和標(biāo)題間距
///
/// @return 屬性文本
+ (instancetype)imageTextWithImage:(UIImage*)image imageWH:(CGFloat)imageWH title:(NSString*)title fontSize:(CGFloat)fontSize titleColor:(UIColor*)titleColor spacing:(CGFloat)spacing;
@end


m文件

//  NSAttributedString+CZAdditon.m

#import "NSAttributedString+Additon.h"

@implementation NSAttributedString (Additon)

+ (instancetype)imageTextWithImage:(UIImage *)image imageWH:(CGFloat)imageWH title:(NSString *)title fontSize:(CGFloat)fontSize titleColor:(UIColor *)titleColor spacing:(CGFloat)spacing {
    // 文本字典
    NSDictionary *titleDict = @{NSFontAttributeName : [UIFont systemFontOfSize:fontSize],
                                NSForegroundColorAttributeName : titleColor};
    NSDictionary *spacingDict = @{NSFontAttributeName : [UIFont systemFontOfSize:spacing]};

    // 圖片文本
    NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
    attachment.image = image;
    attachment.bounds = CGRectMake(0, 0, imageWH, imageWH);
    NSAttributedString *imageText = [NSAttributedString attributedStringWithAttachment:attachment];

    // 換行文本
    NSAttributedString *lineText = [[NSAttributedString alloc] initWithString:@"\n\n" attributes:spacingDict];

    // 按鈕文字
    NSAttributedString *text = [[NSAttributedString alloc] initWithString:title attributes:titleDict];

    // 合并文字
    NSMutableAttributedString *attM = [[NSMutableAttributedString alloc] initWithAttributedString:imageText];
    [attM appendAttributedString:lineText];
    [attM appendAttributedString:text];

    return attM.copy;
}

@end


不得不承認(rèn)碑幅,這樣寫出來來的代碼高度整潔戴陡,易維護(hù),逼格高沟涨。思路更上一層樓恤批。小白一般是通過循環(huán)創(chuàng)建UIView,上面放UIImageView 和Label拼起來的,添加手勢(shì)tap裹赴。喜庞。诀浪。
老司機(jī)之所以是這樣寫是因?yàn)槔纤緳C(jī)有扎實(shí)的iOS基礎(chǔ)。這點(diǎn)很重要

扎實(shí)的基礎(chǔ)是必要的延都!

iOS分類概念深刻理解和靈活運(yùn)用雷猪。盡管初級(jí)也會(huì)使用Masonry,但怎么看晰房,老司機(jī)使用Masonry很6求摇。如果不是看代碼,還真不知道Masonry

make.left.top.right.offset(0);

這樣寫簡(jiǎn)潔舒服多了呢殊者!

總之与境,做技術(shù)這么久,笨笨的我才領(lǐng)悟到你會(huì)做再高深的東西幽污,那些東西也是別人蘋果已經(jīng)給你準(zhǔn)備好的嚷辅,或者其他人封裝好的,你只是模仿寫而已距误。基礎(chǔ)不扎實(shí)扁位,代碼寫不好一切都是空中樓閣准潭,回頭看看自己幾年以前寫的代碼價(jià)值不忍直視。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末域仇,一起剝皮案震驚了整個(gè)濱河市刑然,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌暇务,老刑警劉巖泼掠,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異垦细,居然都是意外死亡择镇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門括改,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腻豌,“玉大人,你說我怎么就攤上這事嘱能×呙罚” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵惹骂,是天一觀的道長(zhǎng)苏携。 經(jīng)常有香客問我,道長(zhǎng)对粪,這世上最難降的妖魔是什么右冻? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任穿扳,我火速辦了婚禮,結(jié)果婚禮上国旷,老公的妹妹穿的比我還像新娘矛物。我一直安慰自己,他們只是感情好跪但,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布履羞。 她就那樣靜靜地躺著,像睡著了一般屡久。 火紅的嫁衣襯著肌膚如雪忆首。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天被环,我揣著相機(jī)與錄音糙及,去河邊找鬼。 笑死筛欢,一個(gè)胖子當(dāng)著我的面吹牛浸锨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播版姑,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柱搜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了剥险?” 一聲冷哼從身側(cè)響起聪蘸,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎表制,沒想到半個(gè)月后健爬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡么介,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年娜遵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夭拌。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡魔熏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸽扁,到底是詐尸還是另有隱情蒜绽,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布桶现,位于F島的核電站躲雅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏骡和。R本人自食惡果不足惜相赁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一相寇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钮科,春花似錦唤衫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蛆挫,卻和暖如春赃承,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悴侵。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工瞧剖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人可免。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓抓于,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親巴元。 傳聞我的和親對(duì)象是個(gè)殘疾皇子毡咏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件逮刨、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,104評(píng)論 4 62
  • 賽比安【勝利聯(lián)盟】團(tuán)隊(duì)邀請(qǐng)您加入。 Saivian塞比安與其他項(xiàng)目的區(qū)別 做微商跟經(jīng)營(yíng)賽比安的區(qū)別 現(xiàn)在讓我們來看...
    青春這張帆閱讀 317評(píng)論 0 0
  • 好奇的目光常扯略螅可以看到比他所希望看到的東西更多修己。 為什么天會(huì)打雷?為什么有的同事辦事效率極高迎罗?為什么有些朋友打游戲...
    芳芳郁金香_1e19閱讀 442評(píng)論 1 3
  • 之前在一家互聯(lián)網(wǎng)公司就職時(shí)睬愤,部門想招聘一個(gè)專職新媒體運(yùn)營(yíng)官。一天連續(xù)面試了四五個(gè)人纹安,統(tǒng)統(tǒng)無(wú)感尤辱。直至快下班了,來了個(gè)...
    叁點(diǎn)壹閱讀 240評(píng)論 0 0