我也在努力解决这个问题。很遗憾,我无法回答您的所有问题,但这是我目前所发现的。
OS X v10.10的AppKit 发行说明对正在发生的事情进行了简要说明,我最初在问题How to create a custom theme NSButton without subclassing NSButtonCell?中看到了这一点。.
逐步弃用 NSCell
Mac OS X 10.10 朝着最终弃用单元格又迈出了一步。不鼓励直接访问控件的单元格,并且允许它的方法将在后续版本中正式弃用。为了提供对重要功能的无单元访问,已将各种单元级 API 提升到各种 Control 子类。NSLevelIndicator、NSTextField、NSSearchField、NSSlider 和 NSPathControl 都有用于此目的的新属性。现在不推荐使用基于单元格的 NSTableView,而应该使用基于视图的 NSTableView。基于矩阵的 NSBrowsers 也被弃用,取而代之的是基于项目的界面。
10.10 文档确实有许多 NSControl 方法用红色划掉。(顺便说一句,我不确定这是否明确表示“已弃用”。)
continuous
但是,和的文档标记enabled
具有误导性。我查看了头文件NSControl
中的文档中被划掉的声明,似乎发生了一些不同的事情:
此方法已弃用NS_DEPRECATED_MAC
:
// Use formatters instead. See -[NSControl formatter] and -[NSControl setFormatter:].
- (void)setFloatingPointFormat:(BOOL)autoRange left:(NSUInteger)leftDigits right:(NSUInteger)rightDigits NS_DEPRECATED_MAC(10_0, 10_0);
这些方法出现在一个NSDeprecated
类别中:
@interface NSControl (NSDeprecated)
// Use formatters instead. See -[NSControl formatter] and -[NSControl setFormatter:].
- (void)setFloatingPointFormat:(BOOL)autoRange left:(NSUInteger)leftDigits right:(NSUInteger)rightDigits NS_DEPRECATED_MAC(10_0, 10_0);
+ (void)setCellClass:(Class)factoryId;
+ (Class)cellClass;
- (id)cell;
- (void)setCell:(NSCell *)aCell;
- (id)selectedCell;
- (NSInteger)selectedTag;
- (void)setNeedsDisplay; // Use setNeedsDisplay:YES instead.
- (void)calcSize;
- (void)updateCell:(NSCell *)aCell;
- (void)updateCellInside:(NSCell *)aCell;
- (void)drawCellInside:(NSCell *)aCell;
- (void)drawCell:(NSCell *)aCell;
- (void)selectCell:(NSCell *)aCell;
@end
这些方法在文档中显示为“在 OS X v10.8 到 OS X v10.9 中可用”,但不在 NSControl 头文件中,所以我认为它们已被完全删除:
-userInterfaceLayoutDirection
-setUserInterfaceLayoutDirection
这些声明以前是方法,但已被重构为属性。有关 isEnabled / setEnabled 方法发生了什么的详细信息,请参阅此答案。所以这些声明在文档中被划掉了,但这是误导性的:
@property (getter=isContinuous) BOOL continuous;
@property (getter=isEnabled) BOOL enabled;
我还没有找到任何关于如何在NSControl
不创建子类的情况下创建NSCell
子类的好信息,尽管显然NSColorWell
是一个 cell-less NSControl
。
我目前的粗略结论是,NSControl
它与 的耦合相当强NSCell
,并且使用一个而没有另一个是不明智的。所以我正在考虑改写一个NSView
子类。
我也希望在这里获得更多信息和建议!