2009-05-02 12 views
34

Sono sorpreso che ciò non avvenga automaticamente, ma vorrei che la finestra delle applicazioni si aprisse automaticamente quando si fa clic sull'icona del Dock.Come si apre la finestra dell'applicazione quando si fa clic sull'icona del dock?

Giusto per chiarire, quando apro l'app, la finestra si apre automaticamente, ma quando faccio clic sulla croce per la finestra ma lascia aperta l'App, la finestra non si apre quando faccio clic sull'icona del dock.

+1

Questo succede automaticamente. Può essere più preciso? –

risposta

64

Implementare - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag nella vostra applicazione delegato. Controlla la documentazione per i dettagli del valore di ritorno.

Le app basate su documenti e le app non documentali si comportano in modo leggermente diverso. Se non ci sono finestre aperte quando si fa clic sull'icona del dock di un'app basata su documenti, verrà creato un nuovo documento. Se non ci sono finestre aperte quando si fa clic sull'icona del dock di un'app non basata su documenti, non farà nulla.

+0

Grazie mille! – Joshua

+0

per quanto riguarda il caso in cui ho due finestre aperte, la finestra principale e la finestra figlio. La finestra secondaria ha un focus. Devo mettere a fuoco la finestra principale dopo aver fatto clic sull'icona del dock. – BUDDAx2

5

Un'applicazione basata su documenti aprirà automaticamente un nuovo documento senza titolo quando l'applicazione diventa attiva, quindi presumo che ci si riferisca a un'app non basata su documenti.

Implementare il metodo applicationDidBecomeActive: nell'applicazione delegata e aprire/mostrare la finestra.

Edit:

Alcune informazioni su Delegates.

Alcune informazioni sul Opening and Closing Windows e NSWindow API

+0

Non capisco come posso implementare applicationDidBecomeActive: method. Puoi darmi un codice tagliato/esempio/ – Joshua

+0

Dov'è la casella di controllo per nascondere su carico in IB? – Joshua

+0

@Joshua - Mi dispiace, è l'esatto opposto. Se si seleziona l'ispettore per la finestra nel file del pennino, assicurarsi che "Visibile all'avvio" sia selezionato. –

9

Questo è ciò che sto facendo per tornare alla schermata principale di un'applicazione non basata su documenti una volta chiusa. So che questo potrebbe non essere il modo giusto per farlo, ma sta funzionando per me finora.

Implementato in AppDelegate, la finestra è definita come variabile di istanza dello stesso oggetto.

- (BOOL) applicationShouldOpenUntitledFile:(NSApplication *)sender 
{ 
    [window makeKeyAndOrderFront:self]; 
    return NO; 
} 

Se qualcuno ha una soluzione migliore, si prega di rispondere. Grazie!

+0

Stavo cercando di capire anche questo (come visualizzare un'altra finestra per un'applicazione basata su documenti) e questo ha funzionato perfettamente! – Kyle

10
- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag 
{ 
    if (flag) { 
     return NO; 
    } 
    else 
    { 
     [YourWindow makeKeyAndOrderFront:self];// Window that you want open while click on dock app icon 
     return YES; 
    } 
} 
2

soluzioni A per aggiungere alla risposta accettata:

Con la risposta accettata la finestra riaperto non ha reagito agli eventi del mouse più.

Quando si utilizza la risposta accettata, è inoltre necessario assicurarsi di deselezionare "Rilascia quando chiuso" nell'Inspector degli attributi della finestra in IB. Questo risolve il problema della finestra che non risponde.

1

Come altri hanno sottolineato, il metodo applicationShouldHandleReopen per la riapertura di finestre chiuse in app non documentali è il modo giusto. L'unica modifica che voglio aggiungere è un modo più flessibile per verificare quale finestra deve essere nuovamente visualizzata, eseguendo l'iterazione tramite l'elenco NSApplication di visibile e invisibile .windows e controllando la finestra richiesta.

func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool { 

    if flag == false { 

     for window in sender.windows { 

      if (window.delegate?.isKind(of: WelcomeWindowController.self)) == true { 
       window.makeKeyAndOrderFront(self) 
      } 
     } 
    } 

    return true 
} 

Appendice

a) Se la finestra è stata nascosta allora verrà mostrato automaticamente quando l'utente cliccherà sull'icona Dock app, quindi non è necessario implementare applicationShouldHandleReopen metodo.

b) Controllato "Rilascio chiuso" l'opzione non influisce in alcun modo sul comportamento precedente.

Problemi correlati