Pregunta

Primero apagado; Soy un novato COMPLETO en Cocoa, así que, por favor, déjenme saber por qué estoy seguro de que es una pregunta estúpida y completamente nueva.

Mi situación es la siguiente: quiero ampliar la funcionalidad de NSTextField. Entre las cosas que quiero lograr está:

Cambiando la apariencia de la cometa.

Detecta cuando el texto alcanza un cierto número de caracteres y luego colorea el texto de manera diferente a ese límite. *

Para mi gran frustración después de pasar bastante tiempo buscando en Google, encuentro cientos de hits que simplemente dicen "Sublass NSTextField y uso este código", y para mi humillación me he encontrado incapaz de asimilar exactamente cómo hacerlo.

Le agradecería muchísimo que alguien me diera un ejemplo práctico de una subclase que logre una de las dos cosas que enumeré anteriormente, e instrucciones * sobre cómo implementar el código para que pueda intentar descubrir cómo funciona. mirando algún código real en vivo.


¡Me disculpo por mi respuesta tardía!

Disculpas a todos ustedes. Tengo un bebé con cólicos en casa, y como usted (o al menos aquellos de ustedes que tienen hijos) pueden imaginar que esto ocupa una gran parte de su tiempo disponible. Gracias a todos por sus respuestas.

Veo que uno de mis principales problemas es que no tengo suficiente conocimiento de los delegados y puntos de venta. He comprado el libro recomendado aquí (y en muchos otros lugares. Algún tipo de "Biblia", me reúno) y lo estoy investigando mientras hablamos en las pocas horas de silencio que tengo estos días. :)

Pero aunque veo que va a ser una herramienta indispensable para mí, sigo obteniendo la mayor comprensión al estudiar ejemplos en lugar de leer la teoría *, por lo que estaría sumamente agradecido si alguien creara un proyecto con una subclase adecuada de ¿La clase relevante ya que entiendo que probablemente no debería extender la clase NSTextfield?

Al instante marcaría la publicación de Mark Thalmans como la respuesta, ya que estoy seguro de que es un adecuado " para los maniquíes " respuesta, pero aguantaré unos días ya que realmente me encantaría leer un archivo. ¡Pero no soy ingrata!

Oh, y; Por favor, créanme, chicos, cuando digo que no soy tan inútil en los idiomas que realmente conozco. Es solo que estos conceptos con la conexión de Interface Builder y GUIs al código son muy desconocidos para mí. Por lo general, solo escribo el código y lo mantengo así.


* Sí, mi primer pequeño proyecto de capacitación es, de hecho, una utilidad de Twitter.

* Me gusta a un niño

* No es que leer la teoría no tenga un valor tremendo para mí también. No estaría donde estoy sin la guía definitiva de Colin Moock para AS3

¿Fue útil?

Solución

Martin,

Comencé con el " Nuevo archivo " diálogo y eligió " Cocoa " a la izquierda y luego a la clase Objective-C.

Eso generará el siguiente código, sin los comentarios. Luego, todo lo que debe hacer es cambiar el objeto NSO en la " interfaz @ quot " línea del encabezado a " NSTextView " y tienes una subclase de trabajo. Si está utilizando XCode 3.0, puede ir a Interface Builder y cambiar la clase de su NSTextField a " MyTextView " ;.

También deberías recoger el libro de Aaron Hillegass " Programación Cocoa para Mac OS X, Tercera Edición " Se ha actualizado para Leopard, si aún no lo has hecho.

Buena suerte.


#import <Cocoa/Cocoa.h>


@interface MyTextView : NSTextView {
 // Outlets & Members go here
}
// Actions & messages go here
@end


#import "MyTextView.h"


@implementation MyTextView

@end

Otros consejos

setInsertionPointColor: se encargará de configurar el color de intercalación, y usar métodos de delegado sería la mejor manera de colorear el texto después de que cambie la cantidad de caracteres. En general, muchas clases en Cocoa son así; puede subclasificarlos, pero la mayoría de las funciones que necesita cambiar están en los métodos de delegado.

NSTextField es especial, porque en realidad no implementa la edición de texto. Eso se hace mediante un NSTextView compartido (por ventana), conocido como el editor de campo . Puede proporcionar un editor de campo especial para un NSTextField dado. Esto se hace de forma canónica mediante la subclasificación de NSWindow (!) Y sobrepasando -fieldEditor: forObject: . Sin embargo, cuando estaba buscando esto, encontré el método NSTextFieldCell & # 8217; s -setUpFieldEditorAttributes: , que parece que podría devolver un editor de campo diferente al de Es de la mano.

Lectura recomendada: Temas de control y programación celular para Cocoa , Descripción general del sistema de texto .

  1. Si realmente tienes que subclasificar, debes subclase < NSTextFieldCell . Las informaciones sobre NSCells son disponible en línea .

  2. No subclasifique la celda si no es absolutamente necesario. Use el delegar métodos .

  3. Al menos el color se puede cambiar usando Los enlaces de NSTextField , usarlos.

También puede obtener algunas de las funciones requeridas con un formateador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top