2015-06-10 11 views
6

Я узнаю о NSControl. Я знаю, что NSCell начал свой путь к устареванию в OS X 10.10 Yosemite, и поэтому я бы предпочел не использовать API, который уходит. Кроме того, в описании класса NSControl указано, что все устройства доступа к ячейкам устарели.В OS X 10.10 можно ли реализовать NSControl без NSCell?

Я понимаю все это, но то, что не так ясно, является тем, что рекомендуется для людей, которые пишут NSControl подклассы 10.10. Все руководства Apple по этому вопросу не упоминают об устаревании NSCell. Я полагаю, что я мог бы просто сделать что-то по-старому, но тогда мне нужно будет изменить свой код, когда Apple перейдет на уровень NSCell на следующий уровень.

Возможно ли реализовать подкласс NSControl без использования NSCell?

Может ли кто-нибудь дать совет или связать меня с ресурсом на эту тему? Это сложно для Google.

ответ

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 имеют новые свойства для этой цели. Cell-based NSTableViews теперь устарели, а NSTableViews на основе представлений должны использоваться вместо . Матричные NSBrowsers также устарели в пользу интерфейса на основе элементов.

В документации 10.10 имеется много методов NSControl, выделенных красным цветом. (Между прочим, я не уверен, что это однозначно означает «устаревший».)

Маркировка документации для continuous и enabled недействительна. Я просмотрел файл заголовка для 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 без также creati ng a NSCell подкласс, хотя, по-видимому, NSColorWell является без ячейки NSControl.

Мой текущий грубый вывод состоит в том, что NSControl достаточно прочно связан с NSCell, и неразумно использовать один без другого. Поэтому я подумываю о создании подкласса NSView.

Я также ценю дополнительную информацию и советы здесь!