2015-06-10 76 views
6

我正在學習NSControl。我知道NSCell已經開始在OS X 10.10 Yosemite中棄用了,因此我寧願不使用即將離開的API。此外,NSControl類參考顯示所有單元格訪問器已被棄用。在OS X 10.10中,我可以在沒有NSCell的情況下實現NSControl嗎?

我明白所有這些,但不清楚的是在10.10編寫NSControl子類的人推薦的課程是什麼。關於此主題的所有Apple指南都沒有提及NSCell的棄用。我想我可以用舊的方式來做事,但是當Apple推進NSCell棄用到下一個級別時,我需要更改我的代碼。

甚至有可能實現NSControl子類而根本不使用NSCell

任何人都可以提供意見或鏈接我的資源在這個問題上?谷歌證明這很困難。

回答

3

我正在努力解決這個問題。我不能不幸回答你所有的問題,但這是我迄今爲止發現的。

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方法。 (順便說一下,我不確定這是否明確表示「已棄用」。)

但是,文檔標記continuousenabled是誤導性的。我已經通過了NSControl在那些在文檔中劃掉聲明的頭文件望去,似乎有一些不同的東西怎麼回事:

  1. 此方法已與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); 
    
  2. 這些方法出現在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 
    
  3. 這些方法應用在文檔中聲明爲「可在OS X v10.8到OS X v10中使用」。9" ,但不是在的NSControl頭文件,所以我認爲他們已經被完全刪除。

    -userInterfaceLayoutDirection 
    -setUserInterfaceLayoutDirection 
    
  4. 這些聲明以前的方法,但都被重構到性能詳見this answer發生了什麼事。在的IsEnabled /的setEnabled方法,使這些聲明是在文檔劃掉,但是這是一個誤導:

    @property (getter=isContinuous) BOOL continuous; 
    @property (getter=isEnabled) BOOL enabled; 
    

我還沒有找到如何不也肌酐創建NSControl子類的任何良好的信息ng NSCell小類,儘管顯然NSColorWell是無細胞NSControl

我目前的粗略結論是NSControlNSCell相當強烈地耦合,並且使用一個沒有另一個是不明智的。所以我正在考慮編寫一個NSView子類。

我也希望更多的信息和建議在這裏!

相關問題