我以编程方式调用complete:
来调用NSTextView自动完成委托方法:
- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index
我有2个表,一个在主表中,另一个在弹出窗口中。弹出窗口从工作表中以模态方式打开。
两个表都具有与NSTextView相同的子类的列。 两个表都具有相同的文件所有者作为委托,但是仅为主表中的表调用委托方法。
奇怪的是,从弹出窗口中的表中正确调用了所有其他委托方法:
- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor
- (BOOL)control:(NSControl *)control isValidObject:(id)object
- (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
更新:
关于NSTableView结构:
这些表格是基于单元格的NSTableView
。该列由我NSTextFieldCell
制作,我已经进行了子类化。以下代码来自子类NSTextFieldCell
。
该方法返回另一个子类,名为CBAutocompleteTextField,这次继承自NSTextView,它是单元格内的文本编辑器。
- (NSTextView *)fieldEditorForView:(NSView *)aControlView
{
return [[[CBAutocompleteTextField alloc] init] autorelease];
}
所以最后,调用complete:
的类是NSTextView
的子类。
答案 0 :(得分:1)
尝试此操作如果有帮助,为了执行自动完成,您需要使用以下委托方法在文本字段字段编辑器中调用complete:
: -
- (void)controlTextDidChange:(NSNotification *)notification {
if( autoComplete ){
return;
} else {
autoComplete = YES;
[[[notification userInfo] objectForKey:@"NSFieldEditor"] complete:nil];
}
}