adi*_*dib 6 safari macos cocoa autocomplete nstextfield
NSTextField当用户输入时,在其下方动态显示"推荐列表" 的最简单方法是什么?就像Safari的地址栏有一些菜单(我很自信Safari的地址栏建议是菜单,因为它有圆角,蓝色渐变选择和背景模糊).
我尝试过使用NSTextView自动完成工具,但发现它不合适:

在上面的示例屏幕截图中,每当我选择自动填充建议时,文本字段仅替换K列表中的建议项目,从而导致Abadi Abadi Kurniawan.
这些是我想要实现的:
注意:这不是关于在文本字段后面添加进度指示器的问题.
Safari 地址栏使用单独的窗口。Apple 有示例项目CustomMenus,只需一两个小时即可对其进行自定义。
开发者会议解释了Cocoa 应用程序中必须做什么关键事件处理
如果您希望能够选择多个单词,您需要提供自己的 FieldEditor(积分应该由其他人提供)
- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(nullable id)client;
{
if ([client isKindOfClass:[NSSearchField class]])
{
if (!_mlFieldEditor)
{
_mlFieldEditor = [[MLFieldEditor alloc] init];
[_mlFieldEditor setFieldEditor:YES];
}
return _mlFieldEditor;
}
return nil;
}
- (void)insertCompletion:(NSString *)word forPartialWordRange:(NSRange)charRange movement:(NSInteger)movement isFinal:(BOOL)flag
{
// suppress completion if user types a space
if (movement == NSRightTextMovement) return;
// show full replacements
if (charRange.location != 0) {
charRange.length += charRange.location;
charRange.location = 0;
}
[super insertCompletion:word forPartialWordRange:charRange movement:movement isFinal:flag];
if (movement == NSReturnTextMovement)
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"MLSearchFieldAutocompleted" object:self userInfo:nil];
}
}
Run Code Online (Sandbox Code Playgroud)
这仅解决了您答案的一半,但我相信您需要子类化NSTextView并实现该- (NSRange)rangeForUserCompletion方法,返回文本字段中整个字符串的范围。这应该确保它不仅仅自动完成最近输入的单词。
如果您想要自定义菜单,则必须自己执行此操作,可能是通过实现该-controlTextDidChange:方法并在适当时使用表格显示自定义视图。
| 归档时间: |
|
| 查看次数: |
1428 次 |
| 最近记录: |