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:)

¿Fue útil?

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];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top