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?

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top