改變NSButton字(title)的顏色

NSButton不能像UIButton那樣簡單的修改title的顏色,或者說NSButton不能像UIButton那樣做很多事,使用起來真的很不方便。
經(jīng)過大量研究測試,終于發(fā)現(xiàn)一種修改文字顏色的相對來說比較簡單的方式-用NSAttributedString;不說了,代碼如下:

   // 創(chuàng)建段落樣式,主要是為了設(shè)置居中
    NSMutableParagraphStyle *pghStyle = [[NSMutableParagraphStyle alloc] init];
    pghStyle.alignment = NSTextAlignmentCenter;
    // 創(chuàng)建Attributes,設(shè)置顏色和段落樣式
    NSDictionary *dicAtt = @{NSForegroundColorAttributeName: [NSColor whiteColor], NSParagraphStyleAttributeName: pghStyle};
    // 創(chuàng)建NSAttributedString賦值給NSButton的attributedTitle屬性
    btn.attributedTitle = [[NSAttributedString alloc] initWithString:@"解綁" attributes:dicAtt];

4行代碼即可,比起一來就說什么重寫drawRect的簡單多了!

但是,經(jīng)過實際操作發(fā)現(xiàn)該方法會導(dǎo)致內(nèi)存泄漏,實在不知是什么原因?qū)е碌?,私下猜測是Apple的bug吧。但是也不是沒有解決方法,經(jīng)過大量測試,發(fā)現(xiàn)以下方法可以解決內(nèi)存泄漏的問題。

    // 創(chuàng)建段落樣式,主要是為了設(shè)置居中
    NSMutableParagraphStyle *pghStyle = [[NSMutableParagraphStyle alloc] init];
    pghStyle.alignment = NSTextAlignmentCenter;
    // 創(chuàng)建Attributes,設(shè)置顏色和段落樣式
    NSDictionary *dicAtt = @{NSForegroundColorAttributeName: [NSColor whiteColor], NSParagraphStyleAttributeName: pghStyle};
    // 創(chuàng)建NSAttributedString賦值給NSButton的attributedTitle屬性;必需從NSButton.attributedTitle創(chuàng)建,否則會有內(nèi)存泄漏;
    // 給NSButton先賦值一個字符串,為的是后面替換,如果NSButton的title是空字符串的話,也會內(nèi)存泄漏
    btn.title = @" ";  // 這里的字符串有一個空格
    // 用NSButton.attributedTitle屬性創(chuàng)建一個NSMutableAttributedString對象
    NSMutableAttributedString *attTitle = [[NSMutableAttributedString alloc] initWithAttributedString:btn.attributedTitle];
    // 替換文字
    [attTitle replaceCharactersInRange:NSMakeRange(0, 1) withString:@"解綁"];
    // 添加屬性
    [attTitle addAttributes:dicAtt range:NSMakeRange(0, 2)];
    // 賦值給NSButton.attributedTitle屬性,不會再有內(nèi)存泄漏
    btn.attributedTitle = attTitle;

經(jīng)過大量測試,發(fā)現(xiàn)只有這種方法不會內(nèi)存泄漏,我也是醉了。

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

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,160評論 25 708
  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡(luò)上收集的一些資料的整理,因此不免有一些不準(zhǔn)確的地方,同時不同JDK版本的...
    高廣超閱讀 16,057評論 3 83
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,599評論 0 6
  • 鄰座長裙姑娘,緊挨右手依窗。擠眉努嘴顯繁忙,視角絕佳攝像。 自我出神屏上,偶然環(huán)視身旁。發(fā)覺隔座對容妝,...
    琴詩音閱讀 323評論 2 7
  • 已然十歲的孩子,早在圣誕節(jié)前一個月,就在客廳里一邊踱步一邊嘀咕道:“今年的圣誕節(jié),圣誕老爺爺會知道我想要一個保溫杯...
    一縷清風(fēng)襲來閱讀 556評論 0 2

友情鏈接更多精彩內(nèi)容