改变NSButton字(title)的颜色

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;

经过大量测试,发现只有这种方法不会内存泄漏,我也是醉了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,184评论 25 709
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,929评论 3 83
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 8,755评论 0 6
  • 邻座长裙姑娘,紧挨右手依窗。挤眉努嘴显繁忙,视角绝佳摄像。 自我出神屏上,偶然环视身旁。发觉隔座对容妆,...
    琴诗音阅读 1,891评论 2 7
  • 已然十岁的孩子,早在圣诞节前一个月,就在客厅里一边踱步一边嘀咕道:“今年的圣诞节,圣诞老爷爷会知道我想要一个保温杯...
    一缕清风袭来阅读 3,474评论 0 2

友情链接更多精彩内容