8

Czy istnieje sposób na wykonanie "makeKeyAndOrderToFront" bez bycia w aplikacji?Jak zamówić okno z przodu, jeśli nie znajdujesz się w aplikacji w Objective-C

Jeśli jestem w Safari i na pasku menu jest MenuItem do mojej aplikacji, po naciśnięciu tego chcę wyświetlić okno mojej aplikacji na froncie (makeKeyAndOrderToFront czyni to właśnie, jeśli jesteś w aplikacji).

W jaki sposób mogę użyć? I jak mogę animować to okno (np. Tweeties Dodaj nowy Tweet -> atebits.com).

Dziękujemy!

+0

Więcej informacji, proszę. Opisz swoje menu dodatkowe w związku z twoją aplikacją. Czy masz menu dodatkowe i oddzielną aplikację, czy też menu jest dodatkowym elementem aplikacji (i ma ukryte okno)? –

+0

Oba systemy Windows są w jednym XIB - oba używają tego samego kontrolera. – ahmet2106

+1

To wciąż jest zbyt ogólnikowe. –

Odpowiedz

0

Być może najlepszym sposobem na osiągnięcie tego, co chcesz, jeśli dobrze rozumiem pytanie, jest to, aby Twoja aplikacja odpowiadała na wydarzenie Apple, które zostało wysłane do niego po wybraniu pozycji menu, która przyniesie twoją aplikację i żądane okno do przodu.

1

AppleScript byłby banalnie łatwym sposobem na umieszczenie aplikacji na pierwszym planie. Jednak nie zrobi żadnej animacji.

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

Jak już ustalono, zmiana kolejności okien w aplikacji nie ma wpływu na to, która aplikacja jest aktywna. Możesz umieścić swoją aplikację na pierwszym planie, aktywując ją:

[NSApp activateIgnoringOtherApps:YES]; 

Jeśli Twoja aplikacja ma ikonę Docku, zachowanie będzie podobne do kliknięcia przez użytkownika.

0

Pod warunkiem, że aplikacja ma połączenie z serwerem Windows (co stanie się w przypadku korzystania z AppKit lub Carbon), można użyć funkcji Core Services SetFrontProcess(), aby wyprowadzić ją na pierwszy plan. SetFrontProcessWithOptions() można użyć do przeniesienia tylko przedniego nieprzenoszącego się okna aplikacji. Funkcje te wydają się być dostępne dla aplikacji 64-bitowych, ale jeśli jesteś kierowania 10.6+, jesteś prawdopodobnie lepiej wyłączyć za pomocą NSRunningApplication class. Coś jak

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

powinno załatwić sprawę.