2010-05-04 2 views
54

Erstellen eines NSC-Zeichensatzes, um ein UITextField für die Eingabe von Benutzernamen einzuschränken. Ich möchte, dass der Benutzer auch einen Unterstrich eingeben kann (also [A-Za-z0-9_]), aber alphanumericCharacterSet enthält ihn nicht. Gibt es eine Möglichkeit, einen Bereich wie diesen kurz zu spezifizieren? Ich sehe + (id)characterSetWithRange:(NSRange)aRange, aber ich verstehe nicht wirklich, wie das funktionieren würde.NSCharacterSet: Wie füge ich der alphanumerischenCharacterSet-Textrestriktion "_" hinzu?

Ich habe eine einfache UITextField-Unterklasse, an die ich den Zeichensatz übergebe. Die Einschränkung funktioniert einwandfrei und erlaubt dem Benutzer nur alphanumerische Eingaben. Sie müssen nur das "_" zu diesen Zertifikaten hinzufügen.

NSCharacterSet *characterSet = [NSCharacterSet alphanumericCharacterSet]; 
[textField setAllowed:characterSet]; 
[textField setFrame:frame]; 

Antwort

115

Objective-C

NSMutableCharacterSet *_alnum = [NSMutableCharacterSet characterSetWithCharactersInString:@"_"]; 
[_alnum formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]]; 

Swift

let _alnum = NSMutableCharacterSet(charactersIn: "_") 
_alnum.formUnion(with: .alphanumerics) 
+4

+1, was ich am meisten liebe, ist, dass über Cocoa ist, dass ich jeden Tag etwas Neues zu entdecken. Das ist neu für mich, aber es ist genau der richtige Weg, dies zu tun. toller Fund! –

+2

In der Tat. Elegant und effektiv. Danke, auf den Weg gezogen. – typeoneerror

28

Eine andere Möglichkeit wäre gewesen, es wandelbar und fügen Sie es zu machen.

NSMutableCharacterSet *characterSet = [NSMutableCharacterSet alphanumericCharacterSet]; 
[characterSet addCharactersInString:@"_"]; 
0
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

    NSCharacterSet *blockedCharacters = [[NSCharacterSet whitespaceCharacterSet] invertedSet]; 
    NSCharacterSet *blockedCharacters2 = [[NSCharacterSet letterCharacterSet] invertedSet]; 
    return ([string rangeOfCharacterFromSet:blockedCharacters].location == NSNotFound || [string rangeOfCharacterFromSet:blockedCharacters2].location); 

} 
Verwandte Themen