我想在控件周围绘制一个适当的现代动画焦点环,根据Q&A 1785,这应该是覆盖 -drawFocusRingMask 和 -focusRingMaskBounds 方法的简单问题。
麻烦的是,对于这个项目,我必须使用Xojo,它可以声明和调用 Cocoa 方法,但没有给我任何机会来实际创建自己的视图子类。
那么,有没有办法在不创建实际子类的情况下获得正确的对焦环?完成工作的其他一些方法,也许是在这个 10.7 技术说明之后引入的?或者在运行时将方法注入现有类的一些偷偷摸摸的方法?
正如一条评论所建议的那样,class_addMethod()
如果您想添加可选的协议方法,那将是正确的。公共 macoslib 项目有一些代码显示如何做到这一点,只需搜索该名称即可。
但是,如果该功能已经实现,则不能添加另一个。在这种情况下,方法调配是解决方案。将选择器的函数地址替换为另一个,然后调用原始函数地址是一种常用方法。
不过,我似乎在 Xojo 中没有这样的例子。
更新
对于标准 Cocoa 控件,最简单的解决方案是相应地设置NSView
属性focusRingType
(在macoslib中可用)。drawFocusRingMask
只有自定义控件才需要实现。