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