Я пытаюсь реализовать поиск в NSTextView с поисковым запросом, исходящим из моего пользовательского поля NSSearchField.
Звучит довольно просто, но я не могу заставить его работать.
Пока я просмотрел всю документацию Apple о NSTextFinder
, его клиенте и FindBarContainer. TextFinder просто предоставляет FindBarView контейнеру, и контейнер показывает его, когда вы активируете поиск.
Вся связь между клиентом, контейнером и TextFinder скрыта. Он просто выглядит как черный ящик, предназначенный для работы «как есть» без какой-либо настройки или вмешательства.
А как насчет метода - (void)performAction:(NSTextFinderAction)op
NSTextFinder? Разве это не для отправки пользовательских команд в TextFinder?
Я пытался назначить ему новую строку поиска со следующим:
NSPasteboard* pBoard = [NSPasteboard pasteboardWithName:NSFindPboard];
[pBoard declareTypes:[NSArray arrayWithObjects:NSPasteboardTypeString, NSPasteboardTypeTextFinderOptions, nil] owner:nil];
[pBoard setString:_theView.searchField.stringValue forType:NSStringPboardType];
NSDictionary * options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSTextFinderCaseInsensitiveKey,
[NSNumber numberWithInteger:NSTextFinderMatchingTypeContains], NSTextFinderMatchingTypeKey,
nil];
[pBoard setPropertyList:options forType:NSPasteboardTypeTextFinderOptions];
[textFinder performAction:NSTextFinderActionSetSearchString];
но это не работает и просто нарушает обычную операцию findBar.
У меня стойкое ощущение, что я делаю что-то не так. Все, что я хочу, это иметь стандартную функцию поиска в моем собственном NSSearchField. Это возможно?
Бьюсь об заклад, я не первый, кого не устраивает нормальный findBar.
Ваша помощь очень нужна и ценна!