Nswindowcontroller muestra una nueva ventana
-
28-10-2019 - |
Pregunta
Soy muy nuevo en la programación de Mac. Acabo de comenzar antes de 3 días.
Estoy haciendo una aplicación de muestra en la que tengo un botón en la ventana principal
Estoy usando este código para abrir un nuevo wndowcontroller
ThirdViewController *tvc = [[ThirdViewController alloc] initWithWindowNibName:@"SecondViewController"];
[tvc showWindow:self];
Esto funciona bien, pero cuando presiono nuevamente el botón volverá a abrir la misma ventana, así que después de cada clic tengo la ventana +1 en la pantalla.
Lo que quiero es si mi nueva ventana ya está en mi pantalla, entonces el botón no puede agregar la misma ventana.
Gracias por adelantado:)
Solución
Si ese código se ejecuta cada vez que se hace clic en el botón, está creando efectivamente un nuevo controlador de ventana, cargando su ventana desde un archivo NIB y muestra esa ventana tantas veces como se hace clic en el botón.
El enfoque estándar para evitar que esto suceda es tener una variable de instancia que es inicialmente nil
y asignándolo un controlador de ventana solo una vez. Posteriormente, la variable de instancia no es nil
Más tiempo y puede probar eso para evitar crear otro controlador y cargar el archivo NIB nuevamente.
Puede, por ejemplo, declarar la siguiente variable de instancia en su aplicación delegado o cualquier controlador que sea responsable del tercer controlador de ventana:
ThirdViewController *tvc;
y, cuando se hace clic en el botón:
if (nil == tvc) {
// If tvc is nil then it's the first time this code is being executed
tvc = [[ThirdViewController alloc] initWithWindowNibName:@"SecondViewController"];
}
[tvc showWindow:self];