Disattivare Opzione Inserisci interruzioni di linea in NSTextField?
-
06-09-2019 - |
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?
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?