Deaktivieren Geben Sie Option-Zeilenumbrüche in NSTextField?
-
06-09-2019 - |
Frage
Ich mag einen neuen Online-Charakter in meinem NSTextField verbieten Eingabe, die standardmäßig möglich ist, indem Sie eine Option: Geben Sie (oder Option-Return).
Während ich gefunden einig Seiten erklärt, wie man erlaubt Zeilenumbrüche em <> ohne die Option Modifikator verwenden zu müssen, kann ich nichts für Deaktivieren Zeilenumbrüche zusammen.
Wie kann dies geschehen?
Lösung
Sie können eine Unterklasse von NSFormatter erstellen und implementieren die isPartialStringValid: ... Methode, um die Newline zu blockieren
.- (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;
}
Andere Tipps
Darf ich fragen, warum Sie diese Funktion deaktivieren möchten? Es ist ein ziemlich Standard-Teil des OS. Beachten Sie, dass der Benutzer auch in einigen Zeichenfolge einfügen könnte aus anderen Ländern, die einen Zeilenumbruch enthält, und sie werden dann bearbeiten, um ihre Bedürfnisse. Wäre es vielleicht besser sein, um diese Funktion intakt ist, zu verlassen, aber eine NSFormatter verwenden, um alles nach dem Zeilenumbruch strippen, wenn es Zeit ist, den Wert aus dem Blick auf das Modell zu kopieren?