優於從不遲到,這可能對他人有所幫助:
這是一個有點棘手的問題,因爲NSControlTextEditingDelegate
/NSTextFieldDelegate
不提供一種方法來直接解決這個問題。你需要做的是創造NSTextView
自定義子類(是的,文字視圖),並覆蓋方法- (NSRange)rangeForUserCompletion
:
- (NSRange)rangeForUserCompletion
{
return [self selectedRange];
}
然後子類NSTextFieldCell
要覆蓋的方法- (NSTextView *)fieldEditorForView:
:
- (NSTextView *)fieldEditorForView:(NSView *)aControlView
{
static MyTextView* _myFieldEditor = nil;
if (_myFieldEditor == nil) {
_myFieldEditor = [[MyTextView alloc] init];
[_myFieldEditor setFieldEditor:YES];
}
return _myFieldEditor;
}
然後在Interface Builder中,將文本字段單元格的類設置爲NSTextFieldCell
的子類。會發生什麼情況是當您的文本字段成爲第一響應者時,該窗口將調用您的單元格-fieldEditorForView:
方法,並將您的自定義文本視圖用作字段編輯器。因此,在編輯文本字段的值時,任何完成都會在您的文本視圖上調用-(NSRange)rangeForUserCompletion
。
然後你可以微調你的-rangeForUserCompletion
,使它返回你想要完成的確切範圍。
此外,在fieldEditorForView:
的代碼假定您的應用程序使用只有一個窗口,如果你正在使用多個窗口(例如基於文檔的應用程序),你就必須改變它,保持一個字段編輯器實例每窗口。
希望它能幫助:)
真的很抱歉,我不知道這個操作 –