Pregunta

Estoy novato con cacao. Tengo un botón y un campo de texto en mi aplicación. Quiero el botón deshabilitado cuando el campo de texto está vacío y habilita cuando el usuario escriba algo.

Cualquier punto para empezar? Cualquier "mágica" de unión en el Interface Builder?

Gracias

[Editado]

he intentado ajustar el AppDelegate como el delegado NSTextfield's y ha añadido este método (myTextField y myButton son IBOutlets):

- (void)textDidChange:(NSNotification *)aNotification
{
    if ([[myTextField stringValue]length]>0) {
        [myButton setEnabled: YES];
    }
    else {
        [myButton setEnabled: NO];
    }
}

Pero no pasa nada ...

¿Fue útil?

Solución

he intentado ajustar el AppDelegate como el delegado NSTextfield's y ha añadido este método (myTextField y myButton son IBOutlets):

- (void)textDidChange:(NSNotification *)aNotification
{
    if ([[myTextField stringValue]length]>0) {
        [myButton setEnabled: YES];
    }
    else {
        [myButton setEnabled: NO];
    }
}

Esa es la manera más difícil, pero debería funcionar bien. Ya sea que usted no ha conectado salida delegate del campo de texto para este objeto, no se ha conectado la salida myTextField al campo de texto, o no se ha conectado la salida myButton al botón.

La otra forma sería la de dar a los inspectores una propiedad exponer el valor de cadena, se unen value del campo de texto vinculante a esta propiedad stringValue, y se unen enabled del botón de unión a stringValue.length del controlador.

También podría dar al controlador de dos propiedades, una de ellas con un valor booleano, y establecer que el marcador cuando depende de la propiedad de la cadena, y se unen en el botón para eso. Eso es un limpiador y posiblemente solución más robusta, aunque es más trabajo.

Otros consejos

Aquí hay una solución utilizando enlaces.

A continuación la configuración que un NSTextField que está ligado a la propiedad "Texto" del propietario del archivo. "Texto" es un NSString. Me cogieron por "continuamente actualizaciones del valor". Pensando en mi solución no funcionaba, pero en realidad no lo estaba actualizando como el usuario ha escrito, y sólo cuando el campo de texto perdido el foco.

La unión del NSTextField a la propiedad de texto propietario NSString del archivo ??

Y ahora la creación de fijaciones en el botón, basta con establecer su estado habilitado a la longitud de la propiedad text del propietario del archivo.

Encuadernación estado habilitado del NSButton a la longitud de la propiedad de texto

Annd, el producto de trabajo.

introducir descripción de la imagen aquí introducir descripción de la imagen aquí

Si utiliza controlTextDidChange en lugar de textDidChange, usted puede deshacerse de la materia de notificación y sólo se basan en ser delegado del NSTextField.

Gracias Pedro. Lo que me faltaba (en mi versión de forma más dura) es este pedazo de código en el awakeFromNib en el AppDelegate:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(textDidChange:) name:NSControlTextDidChangeNotification object:myTextField];

Funciona perfecto. Ahora estoy tratando el camino más fácil, pero me temo que no estoy siendo lo suficientemente bueno con los enlaces.

Para enlazar la propiedad

@property (retain) IBOutlet NSString *aStringValue;

con el valor textfield's, lo que tengo que usar en el IB para "Bind to:"? "Key Controller" y "ruta del Modelo de teclas"

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