Действие NSTextFinder на NSTextView - PullRequest
       27

Действие NSTextFinder на NSTextView

3 голосов
/ 26 августа 2011

Я пытаюсь перехватить все вызовы NSTextFinderClient в моем пользовательском подклассе NSTextView.

Действие show вызывается при моем -(void)performTextFinderAction:(id)sender переопределении, но для поиска следующего, поиска предыдущего и т. Д. Оно не вызывается.

Есть идеи?

Спасибо!

Изменить:

Если вы создаете новый проект и перетаскиваете NSTextView из конструктора интерфейса, команды -g и command-shift-g (найти следующее и найти предыдущее) не работают, когда панель поиска является первым респондентом.

Почему это?

Мне нужен пользовательский подкласс NSTextView для ответа на строку поиска для каждого события.

Ответы [ 2 ]

2 голосов
/ 21 октября 2015

Я искал в исходном коде Apple TextEdit, потому что с TextEdit стандартная панель поиска в Text View прекрасно работает для команды G (и других ярлыков), даже поле поиска является первым респондентом.

Iнашел решение.

Перейдите на свое перо для главного меню и выберите пункты меню «Найти» (и связанные с ним).Они должны быть привязаны к действию по умолчанию, называемому "executeFindPanelAction :."Теперь отвяжите их и вместо этого выполните «executeTextFinderAction:» Первого ответчика.

Вы не можете найти это действие в списке действий Первого ответчика.Поэтому вам нужно добавить его самостоятельно на панели инспектора атрибутов Первого ответчика.

Это подразумевалось в приведенном ниже документе, в котором говорится:

До OS X v10.7, действие по умолчанию дляэти пункты меню выполняются FindPanelAction :.Когда это возможно, вы должны обновить свою реализацию, чтобы использовать это новое действие.

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSResponder_Class/#//apple_ref/occ/instm/NSResponder/performTextFinderAction:

2 голосов
/ 26 августа 2011

Панель поиска общается в частном порядке с клиентским NSTextFinder вместо вызова NSResponder -performTextFinderAction :.Это необходимо для того, чтобы find мог работать, когда что-то помимо клиента имеет ключевой фокус.

Чего вы пытаетесь достичь?

...