【发布时间】:2010-11-17 03:20:25
【问题描述】:
我有一个NSTableView 有几个文本列。默认情况下,这些列的dataCell 是Apple 的NSTextFieldCell 类的一个实例,它做了各种奇妙的事情,但它绘制的文本与单元格顶部对齐,我希望文本垂直居中细胞。
NSTextFieldCell 中有一个内部标志,可用于将文本垂直居中,效果很好。但是,由于它是一个内部标志,因此它的使用不受 Apple 的批准,并且它可能会在未来的版本中毫无警告地消失。我目前正在使用这个内部标志,因为它简单有效。 Apple 显然花了一些时间来实现该功能,所以我不喜欢重新实现它的想法。
所以;我的问题是:什么是正确的方法来实现与 Apple 的 NStextFieldCell 完全相同但绘制垂直居中而不是顶部对齐的文本?
为了记录,这是我目前的“解决方案”:
@interface NSTextFieldCell (MyCategories)
- (void)setVerticalCentering:(BOOL)centerVertical;
@end
@implementation NSTextFieldCell (MyCategories)
- (void)setVerticalCentering:(BOOL)centerVertical
{
@try { _cFlags.vCentered = centerVertical ? 1 : 0; }
@catch(...) { NSLog(@"*** unable to set vertical centering"); }
}
@end
如下使用:
[[myTableColumn dataCell] setVerticalCentering:YES];
【问题讨论】:
-
我认为 try/catch 块在这种情况下没有任何意义,因为 _cflags 是 C 结构,而不是 Objective C 对象。如果在未来的 Mac OS X 版本中更改了这个结构,可能会发生各种奇怪的事情,但不会抛出异常。
-
@Jakob Egger:你可能是对的。我在互联网上的其他地方找到了该解决方案,并按原样复制了它。
-
您应该接受 Jakob Egger 的回答。当使用已接受答案中的代码时,在编辑
NSTextFieldCell时会导致奇怪的故障。雅各布的回答解决了这个问题。 -
我的应用因使用
_cFlags.vCentered而被 MAS 拒绝。您已收到警告。 -
@KeithSmiley:感谢提醒!
标签: cocoa customization vertical-alignment nstextfieldcell