如何在没有子类化的情况下绘制Cocoa焦点环?

时间:2017-11-08 16:07:24

标签: macos cocoa focus xojo

我想在一个控件周围绘制一个适当的,现代的动画聚焦环,根据Q&A 1785,应该是一个简单的事情来覆盖-drawFocusRingMask和-focusRingMaskBounds方法。

麻烦的是,对于这个项目,我必须使用Xojo,它可以声明和调用Cocoa方法,但是没有给我任何实际创建我自己的视图子类的机会。

那么,有没有办法在不制作实际子类的情况下获得正确的聚焦环?其他一些方法,可能是在这篇10.7技术说明之后引入的,可以完成工作吗?或者在运行时将方法注入现有类的一些偷偷摸摸的方法?

1 个答案:

答案 0 :(得分:2)

正如一条评论建议的那样,如果你想添加一个可选的协议方法,class_addMethod()是正确的。公共macoslib项目有一些代码,显示如何执行此操作,只需搜索该名称。

但是,如果该功能已经实现,则无法添加其他功能。在那种情况下,方法调配就是解决方案。这是将选择器的功能地址替换为另一个,然后调用原始地址的常用方法。

尽管如此,我似乎没有在Xojo中有一个例子。

<强>更新

对于标准Cocoa控件,最简单的解决方案是相应地设置NSView属性focusRingType(在 macoslib 中可用)。只有自定义控件才需要实现drawFocusRingMask