【问题标题】:Subclassing NSComboBox to display NSMenu on PopUp子类化 NSComboBox 以在 PopUp 上显示 NSMenu
【发布时间】:2023-03-12 00:43:01
【问题描述】:

我想要一个类似于NSComboBox 的可编辑控件,它具有NSComboBox 的自动完成功能,但组合框的问题是值列表只能是文本值。然而,我想,当按下组合框的箭头按钮时,它应该显示一个 NSMenu(这样我就可以在文本前面显示图标,也可以将分隔符 NSMenuItem 作为NSMenu 中的项目之一)。

所以,我打算继承 NSComboBox 以便抑制 NSComboBox 的原始列表弹出窗口,而不是显示 NSMenu

但我不知道从哪里开始。

首先,我无法抑制默认弹出窗口。 其次,组合框的按钮按下没有通知,这样我就可以显示我的NSMenu。

非常感谢任何帮助。

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

    我能想到的解决方案是看看NSControlTextEditingDelegate。它声明了一个委托方法:

    - (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index

    在 NSTextField 的委托中使用它来实现您的自动完成需求并自己构建下拉按钮。一个带有图像的 NSButton 加上一行用于显示菜单的代码应该可以做到。

    【讨论】:

    • 我已经继续使用子分类选项。通过对 NSComboBox 进行子类化处理 mouseDown 事件 并检查用户是否点击了按钮区域或文本字段区域。如果用户单击按钮区域,则会显示 NSMenu。对于自动完成,自动完成列表使用菜单中 menuItems 的标题填充。
    • 你是个天才@rsharma
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2012-01-24
    相关资源
    最近更新 更多