您需要在某个时候complete:
调用文本字段的字段编辑器。这就是触发完成菜单的原因,但它不会被自动调用。如果您没有将 F5 绑定到任何内容,请尝试在您的字段中输入并点击它。然后应该触发完成;Option-Esc 也可以工作。
如果你想要自动完成,它需要一些工作。你可以从这样的事情开始:
- (void)controlTextDidChange:(NSNotification *)note {
if( amDoingAutoComplete ){
return;
} else {
amDoingAutoComplete = YES;
[[[note userInfo] objectForKey:@"NSFieldEditor"] complete:nil];
}
}
某种标志是必要的,因为触发完成将NSControlTextDidChangeNotification
再次发布,这会导致它被调用,触发完成,这会改变控制文本,这......
显然,您需要在某个时候取消设置标志。这将取决于您希望如何处理用户与自动完成的交互——给定的开始字符串是否可能只有一个完成,或者用户是否需要继续输入以缩小可能性(在这种情况下,您需要再次触发自动完成)?
一个简单的标志也可能无法做到这一点。似乎尽管重新发布了通知,但字段编辑器string
不会改变——它只会响应直接键盘输入而改变。在我的自动完成实现中,我发现我必须保留“最后输入的字符串”的副本,并且每次都将其与字段编辑器的内容进行比较。