Debe configurar el campo de texto como el primer respondedor usando -[NSWindow makeFirstResponder:]
.
Dado que este es un método NSWindow
, solo tiene sentido después de haber agregado la vista correspondiente a la ventana, es decir, después de haber agregado la vista como una subvista dentro de la jerarquía de la vista de la ventana. En el ejemplo del libro, esto sucede cuando configura la vista como la vista de contenido del cuadro dentro de la ventana. Por ejemplo:
- (void)displayViewController:(ManagingViewController *vc) {
// Try to end editing
NSWindow *w = [box window];
…
// Put the view in the box
NSView *v = [vc view];
[box setContentView:v];
// Set the first responder
if ([vc class] == [ViewController class]) {
[w makeFirstResponder:[(ViewController *)vc myTextField]];
}
}
Esto supone ViewController
expone un método getter llamada -myTextField
.
Puede hacer esto más genérico haciendo que sus controladores de vista expongan un método que devuelve el objeto que el controlador de vista recomienda como el primero en responder. Algo así como:
@interface ManagingViewController : NSViewController
…
- (NSResponder *)recommendedFirstResponder;
@end
@implementation ManagingViewController
…
- (NSResponder *)recommendedFirstResponder { return nil; }
@end
Y, en sus subclases concretas de ManagingViewController
, tienen -recommendedFirstResponder
retorno del objeto que debe ser de primera respuesta de la ventana:
@implementation ViewController
…
- (NSResponder *)recommendedFirstResponder { return myTextField; }
@end
Una vez hecho esto, puede cambiar su -displayViewController:
a algo como:
- (void)displayViewController:(ManagingViewController *vc) {
// Try to end editing
NSWindow *w = [box window];
…
// Put the view in the box
NSView *v = [vc view];
[box setContentView:v];
// Set the first responder
NSResponder *recommendedResponder = [vc recommendedFirstResponder];
if (recommendedResponder) [w makeFirstResponder:recommendedResponder];
}
¿Se puede publicar el código con el que está trabajando? – Tim
Mire los ejemplos del libro (29_ViewSwapping). Solo agregué 'IBOutlet NSTextField * test;' y 'IBOutlet NSTextField * test2;' a DepartmentViewController.hy dos NSTextFields a DepartmentView.nib – lueda
como dije ... usando el constructor de interfaz. puedes configurar fácilmente –