我理解这一切,但不清楚的是,在10.10上编写NSControl子类的人推荐的课程是什么.关于这个主题的所有Apple指南都没有提到NSCell的弃用.我想我可以用旧的方式做事,但是当Apple将NSCell的弃用提升到一个新的水平时,我需要更改我的代码.
是否可以在不使用NSCell的情况下实现NSControl子类?
任何人都可以提供建议或链接到这个主题的资源?这证明谷歌很难.
解决方法 我也试图解决这个问题.我不能不幸地回答你所有的问题,但这是我迄今为止所发现的.AppKit Release Notes for OS X v10.10简要解释了我最初在问题How to create a custom themed NSButton without subclassing NSButtonCell?中看到的情况.
Gradual deprecation of NSCellMac OS X 10.10 takes another step towards the eventual deprecation of
cells. Direct access to the cell of a control is discouraged,and
methods which allow it will be formally deprecated in a subsequent
release. A varIEty of cell-level APIs have been promoted to varIoUs
Control subclasses in order to provIDe cell-free access to important
functionality. NSLevelindicator,NSTextFIEld,NSSearchFIEld,NSSlIDer,
and NSPathControl all have new propertIEs for this purpose. Cell-based
NStableVIEws are Now deprecated,and vIEw-based NStableVIEws should be
used instead. Matrix-based NSbrowsers are also deprecated in favor of
the item-based interface.
10.10文档确实有许多红色划分的NSControl方法. (顺便说一下,我不确定这是否明确表示“弃用”.)
但是,连续和启用的文档标记具有误导性.我在文档中划掉的声明中查看了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
>这些声明以前是方法,但已经重构为属性.有关isEnabled / setEnabled方法发生的情况的详细信息,请参阅this answer.所以这些声明在文档中被删除,但这是误导性的:
@property (getter=isContinuous) BOol continuous;@property (getter=isEnabled) BOol enabled;
我还没有找到关于如何创建NSControl子类而没有创建NSCell子类的任何好信息,尽管显然NScolorWell是一个无单元格的NSControl.
我目前的粗略结论是NSControl与NSCell相当强烈地耦合,并且使用一个没有另一个是不明智的.所以我正在考虑编写一个NSVIEw子类.
我也很感激这里有更多的信息和建议!
总结以上是内存溢出为你收集整理的macos – 在OS X 10.10中,我可以在没有NSCell的情况下实现NSControl吗?全部内容,希望文章能够帮你解决macos – 在OS X 10.10中,我可以在没有NSCell的情况下实现NSControl吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)