【问题标题】:NSPredicateEditor: Stop rows from drawing a backgroundNSPredicate 编辑器:停止绘制背景的行
【发布时间】:2013-10-03 23:52:05
【问题描述】:

这是我的一个应用中的 NSPredicateEditor 的图像:

我想做的是阻止班级在每一行中绘制灰色背景和行之间的“分隔符”线,只留下每行中的弹出按钮、文本字段和文本。经过多次谷歌搜索和各种尝试破解课程后,我还没有找到一种方法来做到这一点。

我知道另一个关于 SO 上 NSPredicateEditor 的类似问题,但那个人想绘制自定义的交替行。我希望有人可能有一个技巧来完全停止背景绘图。

谢谢!

【问题讨论】:

    标签: objective-c macos cocoa nspredicateeditor nsruleeditor


    【解决方案1】:

    为了防止在 NSPredicateEditor 中绘制分隔线,只需使用这个极其简单的子类(Swift 4):

    import Cocoa
    
    class PredicateEditor: NSPredicateEditor {
        override func draw(_ dirtyRect: NSRect) {}
    }
    

    【讨论】:

    • 嗯。我没有对此进行测试,但这是一种非常脆弱的方法。您永远不知道 Apple 何时会在操作系统更新中更改此类的内部绘图,从而导致您的应用程序损坏。另一方面,距离 Dave DeLong 向 AppKit 团队提出改进要求也已经 5 年了,因此 Radar 的死亡黑洞似乎没有减弱。
    • @Bryan:我不同意你的观点,即这种方法“超级脆弱”。显然,Apple 只在编辑器中画了一些线条。其他所有绘制由子视图完成,不受此代码影响。
    • 好的。但在任何时候,他们都可以决定用这种方法进行额外的绘图。而且,如果您将其覆盖为无操作,则会中断。这是一个由两部分组成的问题,因为您无法预测 Apple 未来的举动。
    • @Bryan:我不会和你一样担心使用空的draw 实现来破坏东西。如果 Apple 决定在这个控件上投入一些新的努力(现在这已经是非常假设的了),你可能会错过一些新的“chrome”。但这不会影响控件的可用性,因为这是由子视图处理的,不受此draw 方法的影响。如果我以后错过了新的 chrome,我只需通过删除或更新这个 draw 方法来更新我的应用程序。
    【解决方案2】:

    不幸的是,没有办法做到这一点。 :(

    我建议您向https://bugreport.apple.com 提交增强请求。

    【讨论】:

    • 谢谢戴夫;我已经这样做了。另一个关于死亡黑洞的错误报告。
    • @Bryan 错误报告的编号是多少?我会确保 AppKit 团队得到它并且它不会丢失。编辑:没关系,我找到了:#15147978
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 2018-09-15
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    相关资源
    最近更新 更多