Pregunta

Quiero no permitir introducir un carácter de nueva línea en mi NSTextField, que por defecto es posible escribiendo Opción-Enter (o Opción + Retorno).

Mientras me pareció algunos páginas que explica cómo permitir saltos de línea sin tener que utilizar el modificador de opción, no pude encontrar nada para incapacitante saltos de línea por completo.

¿Cómo puede hacerse esto?

¿Fue útil?

Solución

Se puede crear una subclase de NSFormatter e implementar el isPartialStringValid: ... método para bloquear el salto de línea

.
- (BOOL)isPartialStringValid:(NSString **)partialStringPtr 
       proposedSelectedRange:(NSRangePointer)proposedSelRangePtr 
              originalString:(NSString *)origString 
       originalSelectedRange:(NSRange)origSelRange 
            errorDescription:(NSString **)error
{
    // the user may have:
    // -- deleted the left most character
    // -- deleted the last character and we have an empty string
    // both cases are valid
    if (proposedSelRangePtr->location == 0)
        return YES;

    unichar theChar = [*partialStringPtr characterAtIndex:proposedSelRangePtr->location - 1];

    if ([[NSCharacterSet newlineCharacterSet] characterIsMember:theChar]) {
        *error = nil;
        NSBeep();
        return NO;
    }

    return YES;
}

Otros consejos

¿Puedo preguntar por qué desea desactivar esta característica? Es una parte bastante estándar del sistema operativo. Tenga en cuenta que el usuario también puede pegar en alguna cadena de otra parte que contiene un salto de línea y van a continuación, editar a sus necesidades. ¿Sería tal vez mejor dejar esta función intacta, pero el uso de un NSFormatter que se deben eliminar todo después de que el salto de línea cuando es el momento para copiar el valor fuera de la vista con el modelo?

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