子类化NSComboBox以在PopUp上显示NSMenu

时间:2012-07-28 10:47:45

标签: objective-c cocoa

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

所以,我计划子类化NSComboBox,以便NSComboBox的原始列表弹出窗口被禁止,而不是显示NSMenu

但我不知道从哪里开始。

首先,我无法禁止默认弹出窗口。 其次,组合框按下按钮没有通知,因此我可以显示我的NSMenu。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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

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

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