NSButton不能像UIButton那樣簡單的修改title的顏色,或者說NSButton不能像UIButton那樣做很多事,使用起來真的很不方便。
經過大量研究測試,終于發現一種修改文字顏色的相對來說比較簡單的方式-用NSAttributedString;不說了,代碼如下:
// 創建段落樣式,主要是為了設置居中
NSMutableParagraphStyle *pghStyle = [[NSMutableParagraphStyle alloc] init];
pghStyle.alignment = NSTextAlignmentCenter;
// 創建Attributes,設置顏色和段落樣式
NSDictionary *dicAtt = @{NSForegroundColorAttributeName: [NSColor whiteColor], NSParagraphStyleAttributeName: pghStyle};
// 創建NSAttributedString賦值給NSButton的attributedTitle屬性
btn.attributedTitle = [[NSAttributedString alloc] initWithString:@"解綁" attributes:dicAtt];
4行代碼即可,比起一來就說什么重寫drawRect的簡單多了!
但是,經過實際操作發現該方法會導致內存泄漏,實在不知是什么原因導致的,私下猜測是Apple的bug吧。但是也不是沒有解決方法,經過大量測試,發現以下方法可以解決內存泄漏的問題。
// 創建段落樣式,主要是為了設置居中
NSMutableParagraphStyle *pghStyle = [[NSMutableParagraphStyle alloc] init];
pghStyle.alignment = NSTextAlignmentCenter;
// 創建Attributes,設置顏色和段落樣式
NSDictionary *dicAtt = @{NSForegroundColorAttributeName: [NSColor whiteColor], NSParagraphStyleAttributeName: pghStyle};
// 創建NSAttributedString賦值給NSButton的attributedTitle屬性;必需從NSButton.attributedTitle創建,否則會有內存泄漏;
// 給NSButton先賦值一個字符串,為的是后面替換,如果NSButton的title是空字符串的話,也會內存泄漏
btn.title = @" "; // 這里的字符串有一個空格
// 用NSButton.attributedTitle屬性創建一個NSMutableAttributedString對象
NSMutableAttributedString *attTitle = [[NSMutableAttributedString alloc] initWithAttributedString:btn.attributedTitle];
// 替換文字
[attTitle replaceCharactersInRange:NSMakeRange(0, 1) withString:@"解綁"];
// 添加屬性
[attTitle addAttributes:dicAtt range:NSMakeRange(0, 2)];
// 賦值給NSButton.attributedTitle屬性,不會再有內存泄漏
btn.attributedTitle = attTitle;
經過大量測試,發現只有這種方法不會內存泄漏,我也是醉了。