ken*_*nyc 8 macos cocoa appkit
截至2018年,使用AppKit / Cocoa创建自定义控件的正确方法是什么?
传统技术是继承NSControl和/或NSCell实现您要实现的自定义控件的类型。(例如进行NSButton自定义绘图的。)
但是,在WWDC 2014-204中,Apple表示将NSCell要进行“正式弃用”。在WWDC 2012-217中,Apple建议子类化NSView并利用图层支持和图层属性来绘制简单按钮。
如果您子类化NSView以创建自定义控件(例如“更好的按钮”),那么您将失去很多NSControl提供的功能,例如预接线action和target属性,鼠标跟踪,键盘激活以及可能还有很多其他功能。我什至不知道
如果您继承NSControl,甚至继承NSButton,那么接管所有图形的正确方法是什么?Apple的《编程指南》尚未对此进行更新。尤其是,NSButton子类可以仅覆盖draw...自身的所有方法NSCell,然后执行其想要做的事情updateLayer吗?是否可以保证现有的NSButton/NSButtonCell绘图代码仍不会进行任何绘图?
如果要构建具有自定义背景的按钮但仍使用基于字符串的title或,该attributedTitle怎么办?NSButton提供此功能,但title图形如何与之交互updateLayer?
我的用例是创建一个自定义按钮,该按钮提供比传统按钮更多的视觉状态和更多的视觉设计NSButton。使用层支持NSView并updateLayer轻松实现所有不同的状态,但是我更喜欢继承子类,NSControl或者甚至NSButton还保留那些类已经提供的所有功能。
编辑1:基于以下注释更改了措词,以更准确地反映NSCell的当前弃用状态。
| 归档时间: |
|
| 查看次数: |
427 次 |
| 最近记录: |