Macos 在OS X 10.10中,我可以在没有NSCell的情况下实现NSControl吗?

Macos 在OS X 10.10中,我可以在没有NSCell的情况下实现NSControl吗?,macos,cocoa,osx-yosemite,nscell,nscontrol,Macos,Cocoa,Osx Yosemite,Nscell,Nscontrol,我正在学习NSControl。我知道,NSCell已经开始在OS X 10.10 Yosemite中遭到弃用,因此我不希望使用即将消失的API。另外,NSControl类引用显示所有单元格访问器都已弃用 我了解所有这些,但不太清楚的是,对于在10.10上编写NSControl子类的人,推荐的课程是什么。关于这个主题的所有苹果指南都没有提到对NSCell的反对。我想我可以用老方法做事,但当苹果将NSCell的弃用升级到下一个级别时,我需要修改我的代码 甚至可以在根本不使用NSCell的情况下实现N

我正在学习
NSControl
。我知道,
NSCell
已经开始在OS X 10.10 Yosemite中遭到弃用,因此我不希望使用即将消失的API。另外,
NSControl
类引用显示所有单元格访问器都已弃用

我了解所有这些,但不太清楚的是,对于在10.10上编写
NSControl
子类的人,推荐的课程是什么。关于这个主题的所有苹果指南都没有提到对
NSCell
的反对。我想我可以用老方法做事,但当苹果将
NSCell
的弃用升级到下一个级别时,我需要修改我的代码

甚至可以在根本不使用
NSCell
的情况下实现
NSControl
子类吗


有人能提供建议或将我链接到关于这个主题的资源吗?事实证明,谷歌很难做到这一点。

我也在努力解决这个问题。不幸的是,我不能回答你所有的问题,但这是我到目前为止的发现

他们对正在发生的事情有一个简短的解释,这是我最初在问题中看到的

NSCell的逐渐退化 MacOSX10.10朝着最终不赞成的方向又迈出了一步 细胞。不鼓励直接访问控件的单元格,并且 允许它的方法将在以后的版本中正式弃用 释放。各种单元级API已推广到各种应用程序 控制子类以提供对重要数据的无单元访问 功能。NSLevelIndicator、NSTextField、NSSearchField、NSSlider、, 和NSPathControl都具有用于此目的的新属性。基于细胞的 NSTableViews现在已被弃用,基于视图的NSTableViews应该被弃用 用它来代替。基于矩阵的NSB浏览器也被弃用,取而代之的是 基于项的界面

10.10文件中有许多NSControl方法用红色划掉。(顺便说一句,我不确定这是否明确表示“不赞成”。)

但是,
连续
启用
的文档标记会产生误导。我查看了
NSControl
的头文件,查看了文档中被划掉的声明,似乎有一些不同的情况:

  • 此方法已被弃用于
    NS\u弃用\u 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
    是一个无单元格的
    NSControl

    我目前的粗略结论是,
    NSControl
    NSCell
    的耦合相当强,不使用其中一个是不明智的。因此,我正在考虑编写一个
    NSView
    子类

    我也希望能在这里得到更多的信息和建议