我想改变一串字符串中一段字体的颜色
如果把字符串看成Char组成的Array的话,由于是可变的,那么一定是个Mutable的Array,于是需要用NSMutableAttributedString
NSMutableAttributedString *protocolText = [[NSMutableAttributedString alloc]initWithString:@"同意协议"];
[protocolText addAttribute:NSForegroundColorAttributeName value:COLOR_PEACHRED range:NSMakeRange(2, 2)];
//添加成某个Button的Title
[_protocolBtn setAttributedTitle:protocolText forState:UIControlStateNormal];
看到函数不会用
尼玛,我是个野路子,没用过
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
这个函数,怎么办?而且这个value是个id类型的,我不知道传什么怎么办,百度不到.
去看帮助文档
只好拿着这个函数去帮助文档搜索,看到对Value的解释
attributes
A dictionary containing the attributes to add.
Attribute keys can be supplied by another framework or can be custom ones you define.
For information about where to find the system-supplied attribute keys,
see the overview section in #NSAttributedString Class Reference#.
其中NSAttributedString Class Reference是个链接,看意思是可以传入的值,于是点进去看看
点进来,我靠好多英文
英文好的,基本就可以看得很明白了,讲这里是干嘛用的,英文不好的,只要认识Guide,就知道这个see Attributed String Programming Guide是指导,再进入.
进来后就是Cocoa的全部教程,第一个就是默认的都是哪些
Attributed Strings describes the attributed string objects instantiated from NSAttributedString,
NSMutableAttributedString, CFAttributedString and CFMutableAttributedString.
再次进入文档
For example, the text font is stored as an NSFont object under the name given by NSFontAttributeName.
这里的已经写的更明白了,叫For example,就是看NSFontAttributeName
终于找到怎么改了
NSForegroundColorAttributeName
The value of this attribute is a UIColor object. Use this attribute to specify the color of the text during rendering. If you do not specify this attribute, the text is rendered in black.
Available in iOS 6.0 and later.
找到了说明,看懂了之后赶快试一试,因为是字符串嘛,第一反映为把这个作为字符串传进去
[protocolText addAttribute:@"NSForegroundColorAttributeName" value:COLOR_PEACHRED range:NSMakeRange(2, 2)];
卧槽怎么没效果
发现@”NSForegroundColorAttributeName”传入,并没有效果,于是去查NSForegroundColorAttributeName到底是什么
NSString *const NSForegroundColorAttributeName;
发现在OC中是个不变的字符串,头文件中如此定义
UIKIT_EXTERN NSString * const NSForegroundColorAttributeName NS_AVAILABLE(10_0, 6_0); // UIColor, default blackColor
这是什么
这个可以去看UIKIT_EXTERN的讲解,总之NSForegroundColorAttributeName是个变量名,其实际字符串并不是这个,通过打印可以得到实际字符串是@”NSColor”;回想函数的第一个值是”id”是个指针类型,并不是String啊!又把C++的习惯带来了…坑
所以说有效的调用是以下两种
[protocolText addAttribute:NSForegroundColorAttributeName value:COLOR_PEACHRED range:NSMakeRange(2, 2)];
//但是第二个比较作死,只是能用,但是不要写
[protocolText addAttribute:@"NSColor" value:COLOR_PEACHRED range:NSMakeRange(2, 2)];