如何触发完成:NSTextFieldCell的方法,以显示自动完成列表



当我使用NSTextView很容易触发带有建议列表、方法complete:或按 F5 的自动完成弹出窗口。

我试图用NSTextFieldCell做同样的事情.F5 运行良好,但我没有complete:的方法,因此我无法以编程方式打开此类菜单。怎么解决?

这是我尝试过的:

  1. 实现 NSTextField 委托方法textShouldBeginEditing:但这种方法仅在按下键后调用,而不是在单元格获得焦点时

  2. 调用
  3. 重写 NSTextFieldCell 子类中的becomeFirstResponder,但从不调用此方法。无论如何,即使是这样,我也不知道如何实现它,因为正如我之前所说,完整的:方法不是单元API的一部分。

  4. 实现

    - (BOOL)tableView:(NSTableView *)tableView shouldTrackCell:(NSCell *)cell forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
    

    但是在单元格进入编辑模式之前会调用这种方法,同样,我不知道该怎么做,如第 2 点。

谢谢

解决方案

NSTextFieldCell进行子类化并重写此方法以自定义其NSTextView

- (NSTextView *)fieldEditorForView:(NSView *)aControlView
{
    return [[[CBAutocompleteTextField alloc] init] autorelease];
}

子类化NSTextView(在我的例子中CBAutocompleteTextField(并添加以下内容以在获得焦点时触发自动完成:

-(BOOL)becomeFirstResponder
{
    [self performSelector:@selector(complete:) withObject:nil afterDelay:0.01];
    return YES;
}

最新更新