Domanda

Voglio impedire di entrare un carattere nuova linea nel mio NSTextField, che di default è possibile digitando Opzione-Invio (o Opzione Return).

Mentre ho trovato alcuni pagine che spiega come permettere interruzioni di riga senza dover utilizzare il modificatore Opzione, non ho potuto trovare qualsiasi cosa per disabilitazione a capo del tutto.

Come si può fare?

È stato utile?

Soluzione

Si potrebbe creare una sottoclasse di NSFormatter e attuare l'isPartialStringValid: ... metodo per bloccare il ritorno a capo

.
- (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;
}

Altri suggerimenti

Posso chiedere perché si desidera disabilitare questa funzione? E 'una parte piuttosto standard del sistema operativo. Tenete a mente che l'utente potrebbe anche incollare una stringa da altrove che contiene un'interruzione di linea e faranno quindi modificare alle loro esigenze. Sarebbe forse stato meglio lasciare questa funzione intatta, ma utilizzare un NSFormatter per togliere tutto dopo l'interruzione di riga quando è il momento di copiare il valore fuori dalla vista al modello?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top