Question

Je veux désavouer entrer un caractère de nouvelle ligne dans mon NSTextField, qui par défaut est possible en tapant Option Enter (ou Option retour).

Alors que je trouve certains pages expliquant comment permettent sauts de ligne sans avoir à utiliser le modificateur d'options, je ne pouvais pas trouver quoi que ce soit pour invalidantes sauts de ligne tout à fait.

Comment cela peut-il être fait?

Était-ce utile?

La solution

Vous pouvez créer une sous-classe de NSFormatter et mettre en œuvre la isPartialStringValid: ... méthode pour bloquer la nouvelle ligne

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

Autres conseils

Puis-je vous demander pourquoi vous souhaitez désactiver cette fonction? Il est une partie assez standard du système d'exploitation. Gardez à l'esprit que l'utilisateur pourrait bien coller dans une chaîne de caractères qui contient d'ailleurs un saut de ligne et ils vont ensuite modifier à leurs besoins. Ne serait-il peut-être préférable de laisser cette fonctionnalité intacte, mais utiliser un NSFormatter pour enlever tout ce qui suit le saut de ligne quand il est temps de copier la valeur de la vue du modèle?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top