我正在努力解決這個問題。我不能不幸回答你所有的問題,但這是我迄今爲止發現的。
AppKit Release Notes for OS X v10.10對發生了什麼有一個簡短的解釋,我最初在問題How to create a custom themed NSButton without subclassing NSButtonCell?中看到。
的NSCell
的Mac OS X 10.10漸進棄用需要朝 細胞的最終棄用的另一個步驟。不鼓勵對控制單元的直接訪問,並且允許其的方法將在隨後的 版本中被正式棄用。各種單元級API已被提升爲各種控制子類,以便提供對重要功能的無細胞訪問。 NSLevelIndicator,NSTextField,NSSearchField,NSSlider, 和NSPathControl都具有用於此目的的新屬性。基於單元的 現在不推薦使用NSTableViews,而應該使用基於視圖的NSTableViews,而應該使用 。基於矩陣的NS瀏覽器也被棄用,以支持基於項目的接口 。
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
這些聲明以前的方法,但都被重構到性能詳見this answer發生了什麼事。在的IsEnabled /的setEnabled方法,使這些聲明是在文檔劃掉,但是這是一個誤導:
@property (getter=isContinuous) BOOL continuous;
@property (getter=isEnabled) BOOL enabled;
我還沒有找到如何不也肌酐創建NSControl
子類的任何良好的信息ng NSCell
小類,儘管顯然NSColorWell
是無細胞NSControl
。
我目前的粗略結論是NSControl
與NSCell
相當強烈地耦合,並且使用一個沒有另一個是不明智的。所以我正在考慮編寫一個NSView
子類。
我也希望更多的信息和建議在這裏!