2011-02-03 10 views
13

Ya he hecho un par de preguntas sobre este tema, y ​​realmente no he recibido una respuesta real sobre cómo hacerlo (en realidad recibió el "Tumbleweed Badge" jaja).Conexión de elementos del menú en aplicaciones basadas en documentos

Tengo una aplicación basada en documentos (es decir, el Menu.Xib está separado de MyDocument.Xib).

Digamos que quiero agregar un botón 'Audaz' o un botón Comprobar ortografía (elementos que se enumeran en Menu.xib (en Formato> Fuente, etc.) a MyDocument (la interfaz principal). No puedo entender cómo hacer esto.

Cualquier ayuda sería muy apreciada (I premiará una respuesta inmediata si funciona, esto me ha dejado perplejos por un par de semanas).

he intentado añadir un Administrador de fuentes de MyDocument.Xib y conectando de esa manera, pero el botón negrita solo lo habilita, no se desactiva. Además, el corrector ortográfico, etc. no se puede activar a través del Administrador de fuentes.

Tiene que haber una mejor manera de hacer esto.

La documentación de Apple es increíblemente vaga.

Respuesta

17

Esto es exactamente para lo que es el objeto First Responder en IB. Es un objeto proxy para conectar acciones. Cualquier mensaje de acción que se le envíe se pasará por la cadena de respuesta al primer objeto que los acepte. Para las aplicaciones basadas en documentos, la cadena de respuesta incluye el documento actual. Por lo tanto, para conectar la opción del menú a su documento:

  1. Agregue la acción al Primer Respondedor, si es necesario. Puede hacer esto desde la ventana del inspector de IB.
  2. Conecte la acción al Primer Respondedor como si fuera un objeto normal.
  3. Implemente el método de acción en su documento.

Si necesita agregar un mensaje al primer respondedor programáticamente, establezca el objetivo del objeto en nil.

+1

Cuando agregué un 'IBAction' a mi Document.h encontré que aparecía de inmediato en la lista de acciones del primer respondedor de MainMenu.xib. Esto ayudó mucho, ¡gracias! – mtmurdock

+0

No estoy seguro de por qué, pero como dice @mtmurdock, aunque el IBAction fue implementado por una súper clase, tuve que definir mi método OWN IBAction y luego llamar al método de superclase desde aquí. Esto fue para una extensión NSPersistentDocument. –

+1

@CaspNZ Estas instrucciones son anteriores a Xcode 4, cuando IB era una aplicación separada. Debería aparecer automáticamente ahora. Simplemente anule el método normalmente y se llamará a su versión, luego puede llamar a la súper implementación. – ughoavgfhw

Cuestiones relacionadas