Pregunta

Tengo una pregunta sobre el uso de NSViewController y el cambio entre vistas. Tengo una aplicación de cacao donde tengo una ventana. La idea con la ventana es que mostrará una serie de vistas una por una donde cada vista se almacena en un archivo XIB separado. Cada vista tiene un NSViewController correspondiente. He hecho un ejemplo mínimo de lo que estoy haciendo donde solo se carga la primera vista.

@interface MyWindowController : NSWindowController {
    NSViewController *currentViewController;
}
@property (assign) IBOutlet NSView *targetView;
@end

@implementation MyWindowController

@synthesize targetView;

- (id)init
{
    return [super initWithWindowNibName:@"MyWindow"];
}

- (void)dealloc
{
    [currentViewController release];
    [super dealloc];
}

- (void)windowDidLoad
{
    [super windowDidLoad];

    currentViewController = [[NSViewController alloc] initWithNibName:@"FirstView" bundle:nil];
    [self.targetView addSubview:currentViewController.view];
    [currentViewController.view setFrame:targetView.bounds];
}

@end

Cuando se carga la ventana, también se carga la vista desde FirstView.xib y la vista se muestra en la ventana. En este caso, la vista cargada solo tiene un campo de texto y me gustaría que el campo de texto se resalte para que la entrada se pueda escribir directamente sin que el usuario tenga que hacer clic en él, pero no puedo entender cómo hacerlo. ¿Es posible seleccionar el campo de texto cuando se carga la vista?

Después de leer la documentación, descubrí que probablemente quiero establecer el Inicial de la ventana en el campo de texto, pero no puedo encontrar cómo hacerlo cuando el campo de texto está en un archivo XIB diferente al de la ventana.

¿Fue útil?

Solución

Siempre que agrega/reemplace una subvisión y quiera que sea el primer respondedor, haga que el controlador de su ventana haga que la vista sea el primer respondedor de la ventana administrada por el controlador de la ventana:

[[self window] makeFirstResponder:currentViewController.view];

Querrás hacer esto en ambos -windowDidLoad y cualquier otro método agregue/reemplace las subvistas.

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