8

¿Hay alguna manera de hacer un "makeKeyAndOrderToFront" sin estar en la aplicación?Cómo pedir una ventana al frente si no está en la Aplicación en Objective-C

Si estoy en Safari y en la barra de menú hay un elemento de menú para mi aplicación, después de presionar esto, quiero mostrar una ventana de mi aplicación en el frente (makeKeyAndOrderToFront lo hace solo si está en la aplicación)

¿Qué camino puedo usar? Y cómo puedo animar esta ventana (como Tweeties Add new Tweet -> atebits.com).

¡Gracias!

+0

Más información, por favor. Describe tu menú adicional con relación a tu aplicación. ¿Tiene el menú adicional y una aplicación por separado, o el menú es adicional a la aplicación (y tiene una ventana oculta)? –

+0

Ambas ventanas están en un XIB - ambas usan el mismo Controlador – ahmet2106

+1

Esto todavía es demasiado vago. –

Respuesta

0

Quizás la mejor manera de lograr lo que desea, si entiendo la pregunta correctamente, es hacer que su aplicación responda a un evento de Apple que le envíe después de seleccionar su elemento de menú que traerá su aplicación y ventana deseada al frente.

1

Applescript sería una manera trivialmente fácil de hacer que su aplicación sea más atractiva. Aunque no hará ninguna animación.

tell application "System Events" to set frontmost of process "My Application" to true 
21

Como usted ha descubierto, cambiando el orden de ventana dentro de su aplicación no tiene ningún impacto en la aplicación que está activa. Usted puede llevar su aplicación al primer plano activándolo:

[NSApp activateIgnoringOtherApps:YES]; 

Si su aplicación tuvo un icono de la base del comportamiento sería similar al usuario haga clic en él.

0

Siempre que su aplicación tenga una conexión con el servidor de ventanas (que lo hará si está usando AppKit o Carbon), puede usar la función de Servicios Principales SetFrontProcess() para ponerlo en primer plano. SetFrontProcessWithOptions() se puede utilizar para mostrar solo la ventana frontal no flotante de su aplicación. Estas funciones parecen estar disponibles para aplicaciones de 64 bits, pero si usted está apuntando 10.6+, es muy probable mejor usar el NSRunningApplication class. Algo como

[[[NSRunningApplication 
    runningApplicationsWithBundleIdentifier:ident] lastObject] 
activateWithOptions:0] 

debe hacer el truco.

Cuestiones relacionadas