【Mac OS X开发】NSTextFieldCell选中和正常状态的字体段落样式设置
2013-09-01 08:05
716 查看
在设置NSTextFieldCell在选中状态和未选中状态时的两种不同的字体段落样式时,即更改字体颜色与字体类型、大小和段落的首行缩进、行未显示完全的分割样式等,查找网上的资料,发现有很多是复制attributedStringValue进行属性字典的构建,先前也觉得这样很便利,可以直接针对某属性样式进行修改,如下所示:
但是,这样直接使用NSTextFieldCell的attributedStringValue进行拷贝初始化属性字段,有时候运行程序的时候会出现提示为“Thread 1: EXC_BAD_ACCESS (code=1, address=0x10)”的bug,经过Profile的Zombie测试后才发现问题出现在这里。
后来试着修改成如下所示,顺利通过测试!即先构造一个空的NSDictionary,再向里面添加自定义的键值,NSMutableParagraphStyle初始化时使用defaultParagraphStyle进行拷贝而来。
现将运行顺利的代码附上:
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { if([self isHighlighted]) { // 该单元格处于选中状态时 color = [NSColor cyanColor]; [color set]; NSRectFill(cellFrame); NSDictionary *attribs = [[[[self attributedStringValue] attributesAtIndex:0 effectiveRange:nil] mutableCopy] autorelease]; [attribs setValue:[NSColor blueColor] forKey:NSForegroundColorAttributeName]; NSMutableParagraphStyle *paraStyle = [attribs objectForKey:NSParagraphStyleAttributeName]; [paraStyle setFirstLineHeadIndent:12.0]; [paraStyle setLineBreakMode:NSLineBreakByTruncatingTail]; [[self title] drawInRect:cellFrame withAttributes:attribs]; } else { // 该单元格处于未选中状态时 NSDictionary *attribs = [[[[self attributedStringValue] attributesAtIndex:0 effectiveRange:nil] mutableCopy] autorelease]; [attribs setValue:[NSColor whiteColor] forKey:NSForegroundColorAttributeName]; NSMutableParagraphStyle *paraStyle = [attribs objectForKey:NSParagraphStyleAttributeName]; [paraStyle setFirstLineHeadIndent:12.0]; [paraStyle setLineBreakMode:NSLineBreakByTruncatingTail]; [[self title] drawInRect:cellFrame withAttributes:attribs]; } }
但是,这样直接使用NSTextFieldCell的attributedStringValue进行拷贝初始化属性字段,有时候运行程序的时候会出现提示为“Thread 1: EXC_BAD_ACCESS (code=1, address=0x10)”的bug,经过Profile的Zombie测试后才发现问题出现在这里。
后来试着修改成如下所示,顺利通过测试!即先构造一个空的NSDictionary,再向里面添加自定义的键值,NSMutableParagraphStyle初始化时使用defaultParagraphStyle进行拷贝而来。
现将运行顺利的代码附上:
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView*)controlView { if([self isHighlighted]) { // 该单元格处于选中状态时 color = [NSColor cyanColor]; [color set]; NSRectFill(cellFrame); NSDictionary *attribs = [[[NSMutableDictionary alloc] init] autorelease]; [attribs setValue:[NSColor blueColor] forKey:NSForegroundColorAttributeName]; NSMutableParagraphStyle *paraStyle = [[[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy] autorelease]; [paraStyle setFirstLineHeadIndent:12.0]; [paraStyle setLineBreakMode:NSLineBreakByTruncatingTail]; [attribs setValue:paraStyle forKey:NSParagraphStyleAttributeName]; NSFont *font = [NSFont fontWithName:@"Helvetica" size:14]; [attribs setValue:font forKey:NSFontAttributeName]; [[self title] drawInRect:cellFrame withAttributes:attribs]; } else { // 该单元格处于未选中状态时 NSDictionary *attribs = [[[NSMutableDictionary alloc] init] autorelease]; [attribs setValue:[NSColor whiteColor] forKey:NSForegroundColorAttributeName]; NSMutableParagraphStyle *paraStyle = [[[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy] autorelease]; [paraStyle setFirstLineHeadIndent:12.0]; [paraStyle setLineBreakMode:NSLineBreakByTruncatingTail]; [attribs setValue:paraStyle forKey:NSParagraphStyleAttributeName]; NSFont *font = [NSFont fontWithName:@"Helvetica" size:14]; [attribs setValue:font forKey:NSFontAttributeName]; [[self title] drawInRect:cellFrame withAttributes:attribs]; } }
相关文章推荐
- UITabBar 设置字体的颜色(选中状态/正常状态)setTitleTextAttributes
- 用BCG开发字体设定工具栏在按下粗体设置按钮式后,选中内容被设定,但是工具栏上的按钮没有处于按下状态
- 用BCG开发字体设定工具栏在按下粗体设置按钮式后,选中内容被设定,但是工具栏上的按钮没有处于按下状态
- [mac]如何去除NSTextField选中时的边框
- [cocoa]Mac开发知识:NSButton使用及自定义/Safari调用/NSTextField
- Mac开发学习笔记之NSTextField使用
- 同一个textview中设置字体不同样式
- 利用KVC机制,为textField设置字体属性
- Android TextView设置个别字体样式
- IPhone 开发 代码中设置字体样式及使用方法
- UITabBar 设置选中、未选中状态下title的字体颜色
- iOS开发tableView的cell里面有textField,键盘出现的时候,自动上移
- css样式设置鼠标选中后字体颜色以及背景颜色
- FLEX4中如何通过textFiledClass样式给Halo/MXlist设置CFF/DefineFont4字体的例子
- iOS开发技巧之状态栏字体颜色的设置方法
- 同一个textview中设置字体不同样式
- Android开发中EditText设置/隐藏光标位置、选中文本和获取/清除焦点
- VS2010设置VC6的字体样式及背景色、选中字高亮
- VS2010设置VC6的字体样式及背景色、选中字高亮
- ActionScript 3.0 学习(七) AS3 TextFormat及StyleSheet设置文本类TextField字体格式