¿Qué método delegado debería utilizar para responder a los clics en un NSTextField?

StackOverflow https://stackoverflow.com/questions/684166

  •  22-08-2019
  •  | 
  •  

Pregunta

Estoy tratando de responder a una click dentro de un textfield. Cuando se produce el clic, voy a abrir un panel. Mi idea inicial era utilizar un método delegate a responder al evento click - pero encontró que:

Este método no funciona:

(void)textDidBeginEditing:(NSNotification *)aNotification

Este método hace de trabajo, pero sólo cuando realmente editar el texto dentro del campo de texto, no la primera vez que haga clic en él. Y - si puedo editar el texto por segunda vez, este método deja de funcionar:

(void)controlTextDidBeginEditing:(NSNotification *)aNotification

Podría usar tantos detalles como sea posible - o un ejemplo de código, a ser posible. Yo sé que un nstextfield hereda de NSControl, que tiene un evento mouseDown. ¿Hay una manera similar a responder al evento con un textfield, también?

¿Fue útil?

Solución

Desde NSTextField hereda de la clase NSControl, también hereda el método -(void)mouseDown:(NSEvent*) theEvent.

Otros consejos

necesitaba tener un NSTextField llamar a una función delegada al hacer clic en él hoy, y pensé que este código básico podría ser útil. Tenga en cuenta que NSTextField ya cuenta con un delegado y que en SDK v10.6, el delegado ya cuenta con un protocolo asociado a él. Tenga en cuenta que si no se preocupan por los protocolos, las advertencias del compilador, etc., no es necesario las declaraciones de protocolo y de los bienes o el get y set.

MouseDownTextField.h:

#import <Appkit/Appkit.h>
@class MouseDownTextField;

@protocol MouseDownTextFieldDelegate <NSTextFieldDelegate>
-(void) mouseDownTextFieldClicked:(MouseDownTextField *)textField;
@end

@interface MouseDownTextField: NSTextField {
}
@property(assign) id<MouseDownTextFieldDelegate> delegate;
@end

MouseDownTextField.m:
#import "MouseDownTextField.h"

@implementation MouseDownTextField
-(void)mouseDown:(NSEvent *)event {
  [self.delegate mouseDownTextFieldClicked:self];
}

-(void)setDelegate:(id<MouseDownTextFieldDelegate>)delegate {
  [super setDelegate:delegate];
}

-(id)delegate {
  return [super delegate];
}

AppDelegate.h:
@interface AppDelegate <MouseDownTextFieldDelegate>
...
@property IBOutlet MouseDownTextField *textField;
...

AppDelegate.m:
...
  self.textField.delegate = self;
...
-(void)mouseDownTextFieldClicked:(MouseDownTextField *)textField {
  NSLog(@"Clicked");
  ...
}
...

Si usted está construyendo con 10,5 SDK, no tienen la hereda protocolo de NSTextFieldDelegate.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top