2012-06-21 14 views
7

Las NSTableViews basadas en la vista parecen tener solo el comportamiento estándar, donde, para hacer que un campo de texto dentro de la tabla sea el primer respondedor, el usuario debe hacer doble clic o hacer clic y "mantener la calma".En un NSTableView basado en vista, ¿cómo hacer que un control sea el primer respondedor con un solo clic?

Sin embargo, dada la oferta de NSTableViews basada en la vista de flexibilidad, este comportamiento no siempre es deseable ya que ahora hay muchas aplicaciones diferentes y complejas posibles que solo hacer una tabla de "vieja escuela".

¿Cómo puedo hacer fácilmente un control (posiblemente en una celda junto con otros controles) dentro de un NSTable basado en vista? Ve al primer respondedor con un solo clic?

Respuesta

21

Para solucionar esto, reemplazar este método en 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 

y el retorno que sí de inmediato para permitir que el firstResponder a hacerse rápidamente. La tabla "demora" la primera respuesta si se golpeó un campo de texto, y no permite que se realice a menos que la fila se haya seleccionado primero.

Cuestiones relacionadas