2015-06-10 15 views
6

Sto venendo a conoscenza di NSControl. Sono consapevole del fatto che lo NSCell ha iniziato la sua strada verso la deprecazione in OS X 10.10 Yosemite e quindi preferirei non utilizzare un'API che sta andando via. Inoltre, il riferimento alla classe NSControl mostra che tutti gli accessori di cella sono stati deprecati.In OS X 10.10, posso implementare un NSControl senza un NSCell?

Capisco tutto questo, ma ciò che non è chiaro è il corso consigliato per le persone che scrivono sottoclassi NSControl in 10.10. Tutte le guide Apple sull'argomento non menzionano la deprecazione di NSCell. Suppongo che potrei semplicemente fare le cose alla vecchia maniera, ma poi avrei bisogno di cambiare il mio codice quando Apple anticipa la deprecazione di NSCell al livello successivo.

È persino possibile implementare una sottoclasse NSControl senza utilizzare NSCell?

Qualcuno può fornire un consiglio o collegarmi a una risorsa su questo argomento? Ciò si sta dimostrando difficile per Google.

risposta

3

Sto cercando di risolvere anche questo. Non posso purtroppo rispondere a tutte le tue domande, ma ecco cosa ho trovato finora.

Il AppKit Release Notes for OS X v10.10 ha una breve spiegazione di ciò che sta accadendo, che ho visto in origine nella domanda How to create a custom themed NSButton without subclassing NSButtonCell?.

deprecazione graduale NSCell

Mac OS X 10.10 compie un ulteriore passo verso l'eventuale disapprovazione di cellule. L'accesso diretto alla cella di un controllo è sconsigliato e i metodi che lo consentono verranno ufficialmente ritirati in una successiva versione . Una varietà di API a livello di cella sono state promosse in varie sottoclassi di controllo per fornire un accesso senza cella alle importanti funzionalità di . NSLevelIndicator, NSTextField, NSSearchField, NSSlider, e NSPathControl hanno tutti nuove proprietà per questo scopo. basati su celle sono ora deprecati e NSTableViews basati sulla visualizzazione dovrebbero essere usati come . Anche gli NSBrowser basati su matrici sono deprecati a favore di l'interfaccia basata su elementi.

La documentazione 10.10 ha molti metodi NSControl barrati in rosso. (A proposito, non sono sicuro se questo significa inequivocabilmente "deprecato".)

I contrassegni di documentazione per continuous e enabled sono fuorvianti, tuttavia. Ho guardato attraverso il file di intestazione per NSControl alle dichiarazioni che si incrociano nei documenti e ci sembra di essere un paio di cose diverse in corso:

  1. Questo metodo è deprecato con 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. Questi metodi appaiono in una categoria 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. Questi metodi app orecchio nella documentazione come "Disponibile in OS X v10.8 tramite OS X v10.9" , ma non nel file di intestazione NSControl, quindi suppongo che sono stati rimossi completamente.

    -userInterfaceLayoutDirection 
    -setUserInterfaceLayoutDirection 
    
  4. Queste dichiarazioni erano stati precedentemente metodi, ma sono state refactoring in proprietà Vedere this answer per i dettagli di quello che è successo a . i metodi/setEnabled Quindi queste dichiarazioni IsEnabled sono incrociate nei documenti, ma questo è fuorviante:

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

non ho trovato nulla di buono informazioni su come creare un NSControl sottoclasse senza anche cre ng una sottoclasse NSCell, anche se apparentemente NSColorWell è una cella NSControl.

La mia attuale conclusione approssimativa è che NSControl è accoppiato abbastanza forte a NSCell, e non è ragionevole utilizzarne uno senza l'altro. Quindi sto pensando di scrivere una sottoclasse NSView invece.

Gradirei anche maggiori informazioni e consigli qui!

Problemi correlati