2011-02-15 26 views
13

Estoy luchando con Cocoa durante 2 horas ahora sin éxito. Quiero agregar una vista personalizada a la barra de herramientas. Entonces, agregué una NSToolbar a la ventana (con IB) y agregué mi vista (que funciona perfectamente). IB creó automáticamente un NSToolbarItem. Seguí las instrucciones de Apple aquí: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Toolbars/Tasks/AddRemoveToolbarItems.html#//apple_ref/doc/uid/20000755-BBCGJCDJAgregar una vista personalizada a la barra de herramientas

El problema es que no sé qué hacer ahora, la vista no se muestra aunque su etiqueta se muestra en la ventana.

Aquí está el código que utilizo para dibujar (muy simple, es para el propósito de prueba)

- (void)drawRect:(NSRect)dirtyRect { 
    [[NSColor blackColor] set]; 
    [[NSBezierPath bezierPathWithRect:self.bounds] fill]; 
} 

Alguien me puede ayudar?

Gracias de antemano.

+0

Probablemente necesite publicar el código que está utilizando para crear y mantener la vista. El código en la documentación funcionó para mí cuando lo copié/pegué y lo adapté para mi propia aplicación hace unos años, así que a menos que lo esté usando al 100% tal como está, es probable que sea un problema con su código personalizado. :-) –

+0

Actualicé mi publicación. Supongo que no hay nada más que escribir ya que uso IB. ¿Estoy en lo cierto? –

Respuesta

19

He resuelto el problema.

Pongo mi vista personalizada en la raíz del plumín. Agregué un NSToolbarItem clásico y creé dos puntos de venta: uno para la vista personalizada y otro para NSToolbarItem. En -(void)awakeFromNib, llamé al setView: en NSToolbarItem con la vista personalizada.

De acuerdo con algunos recursos en Internet, es un error con Interface Builder.

+0

Gracias, de hecho, hay algún tipo de error en Xcode, y sigue siendo un problema en la versión 4.2. – charles

+4

Cuando arrastra un NSView a una barra de herramientas en IB crea automáticamente un NSToolbarItem que contiene esa vista, usted ya tenía un NSToolbarItem, todo lo que necesitaba era llamar programView al NSToolbarItem en lugar de simplemente configurar su vista personalizada en IB (probablemente un error con la forma en que se desempaquetan las xibs) – valexa

6

De acuerdo con un ingeniero de Apple en el debate http://www.mail-archive.com/[email protected]/msg35673.html, hay un error en Interface Builder por el cual "Vistas personalizadas" (NSViews creadas en IB) no se decodifican correctamente cuando se utilizan como la vista para un NSToolbarItem, por lo que no aparecer en la barra de herramientas. Otros tipos de NSViews, como NSButtons y NSBoxes, funcionarán muy bien como elementos de la barra de herramientas: puede crearlos en Interface Builder y luego arrástrelos a la barra de herramientas para convertirlos en elementos de la barra de herramientas.

(La discusión en el enlace de arriba implica que el error se debe a cómo se crean "Vistas personalizadas" desde el XIB en tiempo de ejecución: usando initWithFrame: en lugar de initWithCoder: La discusión data de 2009 pero aún no tiene se ha solucionado a partir de XCode 4.5/OS X 10.8.)

En mi caso estaba usando un NSView normal para envolver un conjunto de controles (un control deslizante de volumen y botones mínimo/máximo), en lugar de implementar una subclase NSView personalizada. Pude evitar el problema al usar un NSBox como contenedor en lugar de NSView: hice el NSBox transparente, sin título y sin bordes, por lo que actuó exactamente igual que un contenedor simple de NSView. Esto fue un poco más trabajo en IB, pero me ahorré el problema de conectar la vista al elemento de la barra de herramientas programáticamente.

+0

NSBox es casi siempre mejor que una simple NSView para IB, he encontrado. – alfwatt

Cuestiones relacionadas