【问题标题】:Cocoa: Stopping the field editor from auto-completing on space keyCocoa:阻止字段编辑器在空格键上自动完成
【发布时间】:2012-03-29 17:14:24
【问题描述】:

我有一个带有几个NSTextField 控件的自定义视图,我想为其提供自定义自动完成功能,并且我已经使用NSTextFieldDelegate 协议成功实现了所有这些。自动完成是全名或地名,具体取决于正在编辑的文本字段。

问题在于自动完成几乎总是包含空格字符,因此如果用户输入的内容与建议匹配,但不想接受该建议,则字段编辑器将在用户按下时接受建议空格键。我希望字段编辑器仅使用 Tab 键接受建议。

我知道这将涉及子类化 NSTextView 以提供自定义字段编辑器,这是 documented by Apple 作为可接受的方式,但是我不清楚我需要覆盖哪些方法以及被覆盖的方法需要什么去做,为了得到我想要的。

谁能建议这是如何实现的?

【问题讨论】:

  • 您能否举例说明您所描述的自动完成词的类型?
  • @RobKeniger 我已经编辑了我的问题。你去哪儿了?如果你不每一步都握住我的手,我就无法完成工作! :D

标签: cocoa autocomplete subclass nstextview fieldeditor


【解决方案1】:

我承认,在 I discovered an acceptable answer via Google-fu. 魔法密码被公然从原始回答者那里窃取之前,我已经在这个问题上摸索了很长一段时间:

@interface MLFieldEditor : NSTextView @end

@implementation MLFieldEditor


-  (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];
    } }

@end

(Additional reference)

【讨论】:

  • 好东西 - 我会试一试并告诉你。给莫蒂西亚一个吻。
  • @trojanfoe 很高兴为您提供帮助!不要忘记给予赏金。 :)
  • 对不起 - 我以为那是自动的 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 2012-12-27
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多