由于有些日子,我试图为NSTextField
编码自动完成。自动完成应该是这样的,当用户点击NSTextfield时,应该在TextField下显示一个列表,其中有可能。输入一个字母或数字后,列表应该刷新可能性。NSTextField自动完成/建议
在此列表中的建议应来自一个NSMutableArray
或NSMutableDictionary
此自动填充/自我暗示方法应该是对于一个MAC应用。
由于有些日子,我试图为NSTextField
编码自动完成。自动完成应该是这样的,当用户点击NSTextfield时,应该在TextField下显示一个列表,其中有可能。输入一个字母或数字后,列表应该刷新可能性。NSTextField自动完成/建议
在此列表中的建议应来自一个NSMutableArray
或NSMutableDictionary
此自动填充/自我暗示方法应该是对于一个MAC应用。
对于这个问题,您可以使用NSComboBox
。您还需要在IB或[comboBox setCompletes:YES]
中设置代码中的Autocompletes
属性。请记住,它是区分大小写的。
但是,如果你需要它,你所描述的精确的方式来完成的,你需要通过继承NSWindowController
和NSTableView
做出的排行榜,并改变它们看起来像一个列表或菜单下你NSTextField
显现。设置NSTextField
的委托,并对文本更改进行搜索和列表更新。
在这种情况下避免NSMenu
,因为它会在您输入时从文本字段中移除焦点。
苹果在WWDC 2010 Session 145中解决它。 他们解释了关于带有建议菜单的文本字段以及如何使其工作。他们还在他们的网站上提供了示例代码。
您可以找到示例代码here。
只是增加@ ABCDEFG的回答,使NSComboBox不区分大小写的,你也可以继承,并重写它的[completedString:]方法是这样的:
- (NSString *) completedString:(NSString *)string {
NSUInteger l = [string length];
if (!!l)
for (NSString *match in [self objectValues])
if ([[match commonPrefixWithString:string options:NSCaseInsensitiveSearch] length] == l)
return [match stringByReplacingCharactersInRange:NSMakeRange(0, l) withString:string];
return nil;
}
谢谢你的描述。这看起来很困难。你有一个教程或一个代码的例子吗? – Robby
@Robby欢迎您,我编辑了答案并添加了示例代码和相关WWDC会话的链接,他们在该会话中的某个时刻解释了代码。 –
@Robby您是否尝试过示例代码? –