NSTextFinder action on NSTextView

孤街浪徒 提交于 2021-02-18 17:28:27

问题


I'm trying to capture all the NSTextFinderClient calls on my custom NSTextView subclass.

The show action is called on my -(void)performTextFinderAction:(id)sender override, but for find next, find previous, etc. it's not called.

Any ideas?

Thanks!

Edit:

If you create a new project and drag an NSTextView from interface builder, command-g and command-shift-g (find next and find previous) don't work when the find bar is first responder.

Why is this?

I need a custom subclass of NSTextView to respond to the find bar for every event.


回答1:


The find bar communicates privately with the client's NSTextFinder instead of calling NSResponder's -performTextFinderAction:. This is necessary to allow find to work when something besides the client has key focus.

What are you trying to accomplish?




回答2:


I searched in the Apple's TextEdit source code because with TextEdit, the standard search bar within the Text View works fine for command-G (and other shortcuts) even the search field is the first responder.

I found the solution.

Go to your nib for the main menu, and select the "Find" (and related) menu items. They should be bound to the default action called "performFindPanelAction:." Now unbind them and bind to "performTextFinderAction:" of the First Responder instead.

You may not find that action in the First Responder's action list. So you need to add it by yourself in the First Responder's attributes inspector pane.

This was meant by the document below saying

Before OS X v10.7, the default action for these menu items was performFindPanelAction:. Whenever possible which you should update your implementation to use this new action.

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



来源:https://stackoverflow.com/questions/7198432/nstextfinder-action-on-nstextview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!