Pregunta

En Cocoa, tengo una NSOutlineView donde las células son NSTextFieldCell. Los valores de muestra de células que son cadenas que están formateados de acuerdo con ciertas reglas (tales como flotadores o pares de flotadores con un espacio en el medio). He hecho una costumbre NSFormatter para validar el texto, y esto parece que funciona sin ningún problema.

Sin embargo, la célula (o la vista de esquema, estoy seguro de lo que está causando este) sólo parece usar el formateador en el momento en que mi edición terminaría. Si escribir algunos caracteres alfabéticos en el campo de texto (lo que viola las reglas de formato), estos personajes aparecen - la única manera de que noto el formateador haciendo su trabajo es que ahora estoy impedido de moverse foco del teclado lejos de esta célula. Si regreso el contenido de la celda a una forma válida, entonces puedo mover el foco de distancia.

he puesto tanto en la célula y la vista de esquema para ser "continua".

Sería mejor si yo era incapaz de introducir texto en la celda en el primer lugar. ¿Es posible que sea así, y si es así, ¿cómo?

¿Fue útil?

Solución

responder a mi propia pregunta porque he encontrado la solución. No es un método opcional para anular el NSFormatter, y esto resuelve el problema. El método opcional es:

- (BOOL) isPartialStringValid: (NSString*) partialString
             newEditingString: (NSString**) newString
             errorDescription: (NSString**) error

Aquí uno puede simplemente volver NO si el partialString no es válido. Uno puede devolver una cadena fija por referencia en newString si se quiere.

Hay otro método que también podría haber sido utilizado, pero es más complejo:

- (BOOL) isPartialStringValid: (NSString**) partialStringPtr
        proposedSelectedRange: (NSRangePointer) proposedSelRangePtr
               originalString: (NSString*) origString
        originalSelectedRange: (NSRange) origSelRange
             errorDescription: (NSString**) error
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top