【问题标题】:How to validate menu items dynamically populated via Cocoa Bindings如何验证通过 Cocoa 绑定动态填充的菜单项
【发布时间】:2011-11-10 16:04:27
【问题描述】:

背景
我正在通过 Cocoa Bindings 填充 TableView 的 NSPopupMenuCell 菜单。一切都很好(我已经绑定了“内容”、“内容值”和“选定对象”)。菜单在运行时正确填充,并且基础变量正在正确设置(通过 KVC)。一切都为此而努力。

我的问题
接下来我想控制填充菜单项的状态(因为有些需要被禁用)。现在,我已经非常仔细地阅读了 Apple 关于 Enabling Menu Items 的文档……但是对于我的生活,我似乎无法实现 validateMenuItem:validateUserInterfaceItem: ,它们实际上会被调用。

除其他外,我已经尝试在已经存在的 App 委托中实现这些方法,但没有任何乐趣。我是不是对 First Responder 链有误解?

另外,从逻辑上讲,另一种可能性是菜单项实际上确实有目标(以上假设它们没有)。但是,再一次,我似乎无法识别他们的目标(以便我可以在那里实现validateMenuItem:)。

【问题讨论】:

标签: cocoa cocoa-bindings


【解决方案1】:

NSPopupMenuCell 中动态(通过绑定)创建的NSMenuItem 的目标原来是NSPopupMenuCell 本身(因此您可以对其进行子类化并在那里实现validateMenuItem:)。

我想这是因为NSPopupMenuCell 需要执行 KVC 调用(即setValue:forKey:)。

【讨论】:

    【解决方案2】:

    如果您使用绑定来准备内容,您还可以将每个NSMenuItemenabled 属性绑定到模型中的一个布尔值,表示是否应该启用它。

    【讨论】:

    • 但是 NSMenuItems 是通过前面提到的绑定动态生成的……XIB 中只有一个替代菜单项,并且在调用时设置其“启用”绑定不会影响菜单项状态(也没有任何可观察的)。我是不是误会了什么?!
    猜你喜欢
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 2021-09-27
    • 2013-07-10
    相关资源
    最近更新 更多