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

macos – 在OS X 10.10中,我可以在没有NSCell的情况下实现NSControl吗?,第1张

概述我正在学习NSControl.我知道NSCell已经开始在OS X 10.10 Yosemite中弃用,所以我宁愿不使用即将消失的API.此外,NSControl类参考显示已弃用所有单元访问器. 我理解这一切,但不清楚的是,在10.10上编写NSControl子类的人推荐的课程是什么.关于这个主题的所有Apple指南都没有提到NSCell的弃用.我想我可以用旧的方式做事,但是当Apple将NSCe 我正在学习NSControl.我知道NSCell已经开始在OS X 10.10 Yosemite中弃用,所以我宁愿不使用即将消失的API.此外,NSControl类参考显示已弃用所有单元访问器.

我理解这一切,但不清楚的是,在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 NSCell

Mac 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吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1023132.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存