2011-02-03 8 views
13

Ho già fatto un paio di domande su questo argomento e non ho ricevuto una vera risposta su come farlo (effettivamente ha ricevuto il "Tumbleweed Badge" lol).Collegamento di voci di menu in applicazioni basate su documenti

Ho un'applicazione basata su documenti (ovvero il Menu.Xib è separato da MyDocument.Xib).

Dire che voglio aggiungere un pulsante "Grassetto" o un pulsante Controllo ortografico (elementi elencati in Menu.xib (in Formato> Font ecc.) In MyDocument (l'interfaccia principale). Non riesco a capire come fare questo.

Qualsiasi aiuto sarebbe molto apprezzato (I premierà subito una risposta se funziona, questo mi ha messo in difficoltà per un paio di settimane).

ho provato ad aggiungere un gestore di font per MyDocument.Xib e collegandosi in questo modo, ma solo il pulsante Grassetto abilita, non disabilita. Inoltre, Controllo ortografia ecc. non può essere attivato tramite Font Manager.

Deve esserci un modo migliore per farlo.

La documentazione Apple è incredibilmente vaga.

risposta

17

Questo è esattamente ciò che l'oggetto First Responder in IB è per. È un oggetto proxy per connettere azioni. Qualsiasi messaggio di azione inviato ad esso verrà passato lungo la catena di risposta al primo oobject che li accetta. Per le applicazioni basate su documenti, la catena di risposta include il documento corrente. Quindi, per connettere la voce di menu al documento:

  1. Aggiungere l'azione a First Responder, se necessario. Puoi farlo dalla finestra dell'ispettore di IB.
  2. Collegare l'azione a First Responder come se fosse un oggetto normale.
  3. Implementare il metodo di azione nel documento.

Se è necessario aggiungere un messaggio al primo risponditore in modo programmatico, impostare la destinazione dell'oggetto su nil.

+1

Quando ho aggiunto un 'IBAction' al mio documento.h ho scoperto che è apparso subito nella lista di azioni del primo soccorritore MainMenu.xib. Questo ha aiutato molto, grazie! – mtmurdock

+0

Non so perché, ma come dice @mtmurdock, anche se IBAction è stato implementato da una super classe, avevo bisogno di definire il mio metodo OWN IBAction, e poi chiamare il metodo super-classe da qui. Questo era per un'estensione NSPersistentDocument. –

+1

@CaspNZ Queste istruzioni sono pre-Xcode 4, quando IB era un'applicazione separata. Dovrebbe apparire automaticamente ora. Basta eseguire l'override del metodo normalmente e la tua versione verrà chiamata, quindi puoi chiamare la super implementazione. – ughoavgfhw

Problemi correlati