2011-05-24 6 views
8

He estado leyendo la documentación de Apple sobre NSButtons y celdas y realmente no puedo entender la distinción entre los dos. Agregando a esta complejidad, parece que ambos tienen una gran superposición de métodos como setTitle:, etc. y no estoy seguro de cuáles debo usar.NSButtonCell vs NSButton

¿Alguien puede explicar cuáles son las diferencias básicas?

Gracias,
Teja

Respuesta

8

Yo Puedes pensar en un control como representante de la célula o "agente". El control es NSView, lo que significa dos cosas importantes en estas circunstancias. Primero, que representa un área de una ventana a dibujar. Segundo, que acepta la interacción del usuario.

El control no hace mucho por sí mismo. La celda es lo que hace todo el trabajo; observe, por ejemplo, que las celdas pueden dibujarse en un marco determinado. Esta es la responsabilidad de una vista, pero el control difiere eso a la celda, simplemente proporcionando un área para el dibujo.

Del mismo modo, cuando un usuario hace clic en un control, el control recibe el evento y se da cuenta de lo que significa, pero el trabajo de realizar una acción en respuesta al evento se transfiere a la celda.

Si observa los documentos para varios pares control/celda (NSButton y NSButtonCell siendo uno de esos pares), verá mencionar los métodos de "cobertura". Esto significa que el control tiene métodos con los mismos nombres que su celda homóloga, que simplemente llama a la celda. Esa es la fuente de la duplicación que mencionaste. Cuando desee utilizar uno de estos métodos, llámelo al control; como la cara pública del par, lo más probable es que simplemente pregunte a la célula de todos modos.

La mejor descripción proporcionada por Apple de la interacción es "How Controls and Cells Interact" en la guía Temas de control y celda.


En el sentido de un agente que tiene un agente que procure conciertos.
esto no es estrictamente cierto de todos los puntos de vista; en realidad es una característica de NSResponder de la cual NSView hereda.

+0

Veo que es lo mismo que UIView y CALayer? – onmyway133

-2

NSButton celular tiene mucho más opciones Cutomizable para el dibujo y el comportamiento. Las diferencias se ven mejor en las clases que heredan de (NSButtonCell hereda de la clase ActionCell, mientras que el NSButton hereda de la clase NSControl

Tome un vistazo a la documentación mejor:.

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSButton_Class/Reference/Reference.html

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSButtonCell_Class/Reference/Reference.html

usted debe elegir en función de cómo desea que los botones que se pueden extraer y se comportan. Si es un simple botón que desea, utilice NSButton.

+0

No estoy seguro de que te sigo. ¿No es 'NSButtonCell' una parte de' NSButton'? Creo que asignando 'NSButton' y llamando' [button cell] 'devuelve el' NSButtonCell' asociado a él. Eso fue lo que me confundió. –

2

Extraído de Cocoa Programming for OS X: The Big Nerd Ranch Guide

“Una célula se encarga de los detalles de implementación del control. Para la parte más , las propiedades y los métodos de la celda están "cubiertos" por las propiedades y los métodos idénticos de en el control correspondiente. Para la instancia , cuando cambia el título en una etiqueta, la celda de la etiqueta es haciendo el trabajo, pero usted interactúa con la propiedad stringValue de la etiqueta.

Las células tienen una larga historia en Cocoa. Originalmente se agregaron para abordar problemas de rendimiento: muchas de las tareas básicas de un control se transfirieron a la celda, lo que podría hacer más de manera eficiente que el control.

Las computadoras Mac son mucho más poderosas de lo que eran en aquellos días, y las células se han convertido en un estorbo. Apple ha declarado que está en el proceso de desaprobación células, pero todavía se verá en su esquema documento y en código antiguo.”

0

NSButtonCell es una subclase de NSActionCell utilizado para implementar las interfaces de usuario de botones, interruptores y botones de radio. También se puede usar para cualquier otra región de una vista que esté diseñada para enviar un mensaje a un objetivo al hacer clic. La subclase NSButton de NSControl usa un solo NSButtonCell. Para crear grupos de interruptores o botones de radio, use un NSMatrix sosteniendo un conjunto de NSButtonCell s.

Cuestiones relacionadas