我有一個NSTableView
與幾個文本列。默認情況下,這些列的dataCell
是Apple的NSTextFieldCell
類的一個實例,它可以做各種奇妙的事情,但它會繪製與單元格頂部對齊的文本,並且我希望文本在單元格中垂直居中。是否有一種「正確」的方式讓NSTextFieldCell繪製垂直居中文本?
NSTextFieldCell
中有一個內部標誌,可以用來垂直居中顯示文本,並且它可以很好地工作。但是,由於它是內部標誌,因此它的使用不受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版本中更改此結構,可能會發生各種奇怪的事情,但不會拋出異常。 – 2011-10-24 21:52:53
@Jakob Egger:你可能是對的。我在互聯網上的其他地方找到了解決方案,並按原樣複製它。 – 2011-10-24 22:45:14
你應該接受Jakob Egger的回答。當使用接受的答案中的代碼時,編輯「NSTextFieldCell」時會引起奇怪的毛刺。 Jakob的回答解決了這個問題。 – 2013-01-06 06:27:09