【发布时间】:2022-01-12 18:01:21
【问题描述】:
我正在创建多个不同的 UI 子类,这些子类可以使用 JSContext 创建,我希望它们都继承一组特定的方法。
课程从NSButton 到NSTextView 不等。让一个子类充当NSView 父类会很好,但我不知道这是否可能——或者如何开始搜索。
例如:
@interface CustomButtonClass : NSButton
我正在寻找一种方法让 NSButton 继承自自定义 NSView 子类。
有没有办法解决这个问题,还是我需要创建多个中间类?
【问题讨论】:
-
您是否希望在
NSButton和NSView之间有效地“注入”一个类,例如CustomButtonClass : NSButton : CustomViewClass : NSView?类继承是类本身的属性,而不是该类中的对象的属性 - 所以这样做会影响您的进程中的 allNSButtons、NSTextViews 等。既极其脆弱,又充满风险。您能否具体说明您希望这些类型继承什么? (可能还有其他方法可以将这些实现应用于您的类型。) -
这其实是我怀疑的。我希望创建很多方便的方法,可以使用
JSExport向JSContext公开。正如你描述的一个非常好的反对我最初目标的案例,我想最明智的方法是创建一个JSExport协议,它暴露了大部分原生核心NSView的东西,然后手动实现其余的。 -
这听起来很合理。根据您的特定需求,您可以使用 Obj-C 运行时至少自动执行部分操作:如果您创建自己的协议来优化
JSExport,您可以遍历所有符合该协议的类型和class_addMethod/method_setImplementation一个具体的实现,模仿从其他类型继承该实现的样子。 -
NSView上的类别怎么样? -
只是说类别也可以继承自己的@protocols。
标签: objective-c macos cocoa appkit