首页 文章

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

提问于
浏览
3

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

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

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

1 回答

  • 2

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

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

    不过,我似乎没有在Xojo中有一个例子 .

    Update

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

相关问题