当我使用NSTextView
很容易触发带有建议列表、方法complete:
或按 F5 的自动完成弹出窗口。
我试图用NSTextFieldCell
做同样的事情.F5 运行良好,但我没有complete:
的方法,因此我无法以编程方式打开此类菜单。怎么解决?
这是我尝试过的:
-
实现 NSTextField 委托方法
textShouldBeginEditing
:但这种方法仅在按下键后调用,而不是在单元格获得焦点时
调用 重写
NSTextFieldCell
子类中的becomeFirstResponder
,但从不调用此方法。无论如何,即使是这样,我也不知道如何实现它,因为正如我之前所说,完整的:方法不是单元API的一部分。实现
- (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;
}