【Mac OS X开发】NSTextFieldCell选中和正常状态的字体段落样式设置
来源:互联网 发布:售电软件 编辑:程序博客网 时间:2024/05/16 11:33
在设置NSTextFieldCell在选中状态和未选中状态时的两种不同的字体段落样式时,即更改字体颜色与字体类型、大小和段落的首行缩进、行未显示完全的分割样式等,查找网上的资料,发现有很多是复制attributedStringValue进行属性字典的构建,先前也觉得这样很便利,可以直接针对某属性样式进行修改,如下所示:
- (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]; }}
- 【Mac OS X开发】NSTextFieldCell选中和正常状态的字体段落样式设置
- HTML5的段落和文字样式设置
- 设置UITabBarItem字体和选中状态
- 看懂mac OS X的内存状态
- Windws 7和Mac OS X的共享设置
- ANT在Mac OS X上的安装和设置
- mac 高效的iOS和OS X开发工具
- Mac OS X 环境变量的设置
- Mac OS X 环境变量的设置
- Mac OS X 环境变量的设置
- Mac OS X 环境变量的设置
- 根据预定义段落进行段落样式的设置和插入目录(VBA)
- segmentcontroler设置被选中状态下字体的颜色 大小
- IOS开发的字体样式的设置
- HTML段落自动换行的样式设置
- Mac OS X 环境变量设置
- Mac OS X系统设置
- Mac OS X ssh设置
- 9.6.1 哈希查找之分离链接哈希表解决哈希碰撞(2)
- Session详解
- iOS上的socket通信
- 分割图像并指定多个灰度阀值,对同一幅图像进行分区域的二值化
- LA 4256 Salesmen
- 【Mac OS X开发】NSTextFieldCell选中和正常状态的字体段落样式设置
- Hibernate学习04---Hibernate对象三种状态以及openSessoin/getCurrentSession
- Linux基本配置和管理 1---- Linux网络基本配置
- android之IntentFilter的用法_Intent.ACTION_TIME_TICK在manifest.xml不起作用
- 网页设计技巧之减肥
- 2012-2013年度总结
- 命令行压缩解压缩一 7z
- hdu 1528 Card Game Cheater ( 二分图匹配 )
- C++ 中库函数bsearch的简单研究(含示例)