2015-08-16 133 views
0

由于有些日子,我试图为NSTextField编码自动完成。自动完成应该是这样的,当用户点击NSTextfield时,应该在TextField下显示一个列表,其中有可能。输入一个字母或数字后,列表应该刷新可能性。NSTextField自动完成/建议

在此列表中的建议应来自一个NSMutableArrayNSMutableDictionary

此自动填充/自我暗示方法应该是对于一个MAC应用。

回答

1

对于这个问题,您可以使用NSComboBox。您还需要在IB或[comboBox setCompletes:YES]中设置代码中的Autocompletes属性。请记住,它是区分大小写的。

但是,如果你需要它,你所描述的精确的方式来完成的,你需要通过继承NSWindowControllerNSTableView做出的排行榜,并改变它们看起来像一个列表或菜单下你NSTextField显现。设置NSTextField的委托,并对文本更改进行搜索和列表更新。

在这种情况下避免NSMenu,因为它会在您输入时从文本字段中移除焦点。

苹果在WWDC 2010 Session 145中解决它。 他们解释了关于带有建议菜单的文本字段以及如何使其工作。他们还在他们的网站上提供了示例代码。

您可以找到示例代码here

+0

谢谢你的描述。这看起来很困难。你有一个教程或一个代码的例子吗? – Robby

+0

@Robby欢迎您,我编辑了答案并添加了示例代码和相关WWDC会话的链接,他们在该会话中的某个时刻解释了代码。 –

+0

@Robby您是否尝试过示例代码? –

2

只是增加@ 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; 
}