8

C'è un modo per rendere un "makeKeyAndOrderToFront" senza essere nell'applicazione?Come ordinare una finestra in primo piano se non ci si trova nell'applicazione in Objective-C

Se sono in Safari e nella barra dei menu c'è un MenuItem alla mia app, dopo aver premuto questo, voglio mostrare una finestra della mia App in Front (makeKeyAndOrderToFront rende questo solo se ci si trova nell'applicazione).

Quale modo posso utilizzare? E come posso animare questa finestra (come Tweeties Aggiungi nuovo Tweet -> atebits.com).

Grazie!

+0

Ulteriori informazioni, per favore. Descrivi il tuo menu extra in relazione alla tua applicazione. Avete il menu in più e un'applicazione separata, oppure il menu è in più l'applicazione (e ha una finestra nascosta)? –

+0

Entrambe le finestre sono in un XIB - entrambi utilizzano lo stesso controller – ahmet2106

+1

Questo è ancora troppo vago. –

risposta

0

Forse il modo migliore per ottenere ciò che si desidera, se ho compreso correttamente la domanda, è di fare in modo che l'applicazione risponda a un evento Apple inviato dopo la selezione della voce di menu che porterà l'applicazione e la finestra desiderata davanti.

1

Applescript sarebbe un modo banalmente semplice per rendere la tua app in primo piano. Tuttavia, non farà alcuna animazione.

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

Come hai scoperto, la modifica dell'ordine delle finestre all'interno dell'applicazione non ha alcun impatto su quale applicazione è attiva. È possibile portare l'applicazione in primo piano per attivarlo:

[NSApp activateIgnoringOtherApps:YES]; 

Se l'applicazione ha avuto un icona del dock il comportamento sarebbe simile al clic dell'utente su di esso.

0

Se l'applicazione dispone di una connessione al server della finestra (che avverrà se sta utilizzando AppKit o Carbon), è possibile utilizzare la funzione Servizi principali SetFrontProcess() per portarla in primo piano. SetFrontProcessWithOptions() può essere utilizzato per portare in primo piano solo la finestra anteriore non flottante della tua app. Queste funzioni sembrano essere disponibili per le applicazioni a 64 bit, ma se ci si rivolge 10.6+, è molto probabile meglio usare il NSRunningApplication class. Qualcosa di simile

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

dovrebbe fare il trucco.

Problemi correlati