2012-06-21 4 views
7

NSTableViews, основанные на представлении, похоже, имеют только стандартное поведение, где для того, чтобы сделать текстовое поле внутри таблицы первым ответчиком, пользователь должен либо дважды щелкнуть, либо щелкнуть, либо «сохранить спокойствие».В режиме NSTableView, основанного на представлении, как сделать управление первым ответчиком одним щелчком мыши?

Однако, учитывая предложение NSTableViews, основанное на гибкости, такое поведение не всегда желательно, поскольку в настоящее время существует много разных и сложных приложений, чем просто выполнение таблицы «старой школы».

Как я могу легко сделать управление (возможно, в ячейке вместе с другими элементами управления) внутри NSTableView на основе представления одним ответчиком одним щелчком мыши?

ответ

21

Чтобы решить эту проблему, переопределить этот метод NSTableView:

@interface NSResponder (NSControlEditingSupport) 

/* This is a responder chain method to allow controls to determine when they should become first responder or not. Some controls, such as NSTextField, should only become first responder when the enclosing NSTableView/NSBrowser indicates that the view can begin editing. It is up to the particular control that wants to be validated to call this method in its -mouseDown: (or other time) to determine if it should attempt to become the first responder or not. The default implementation returns YES when there is no -nextResponder, otherwise, it is forwarded up the responder chain. NSTableView/NSBrowser implements this to only allow first responder status if the responder is a view in a selected row. It also delays the first responder assignment if a doubleAction needs to (possibly) be sent. 'event' may be nil if there is no applicable event. 
*/ 
- (BOOL)validateProposedFirstResponder:(NSResponder *)responder forEvent:(NSEvent *)event NS_AVAILABLE_MAC(10_7); 

@end 

И вернуть YES сразу же, чтобы позволить firstResponder быть сделано быстро. Таблица «задерживает» создание первого ответчика, если было удалено текстовое поле, и не позволяет его выполнять, если только первая строка не была выбрана.

 Смежные вопросы

  • Нет связанных вопросов^_^