Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SWIFT: Nstextfield allow only specified characters

I need somebody to show me how to allow specific characters in a nstexfield in swift. For example when a user tries to enter a character which is not in the list the nstexfield will not show that character in the field.. Very simple. There are many IOS examples out there but could not find an OSX example.

like image 650
Cory Trentini Avatar asked Feb 13 '16 15:02

Cory Trentini


2 Answers

First add a NSTextFieldDelegate to your class... and then

add this :

 override func controlTextDidChange(obj: NSNotification) {
    let characterSet: NSCharacterSet = NSCharacterSet(charactersInString: " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ0123456789-_").invertedSet
    self.textField.stringValue = (self.textField.stringValue.componentsSeparatedByCharactersInSet(characterSet) as NSArray).componentsJoinedByString("")
}

you have to replace self.textfield with your own textfield which you want to control.

SWIFT 4 Edit

 override func controlTextDidChange(_ obj: Notification) {
    let characterSet: NSCharacterSet = NSCharacterSet(charactersIn: " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ0123456789-_").inverted as NSCharacterSet
    self.textField.stringValue =  (self.textField.stringValue.components(separatedBy: characterSet as CharacterSet) as NSArray).componentsJoined(by: "")
}
like image 75
Koray Birand Avatar answered Nov 03 '22 18:11

Koray Birand


For Swift 3:

override func controlTextDidChange(_ notification: Notification) {
    if textField == notification.object as? NSTextField {
        let characterSet: CharacterSet = (CharacterSet(charactersIn: "0123456789").inverted as NSCharacterSet) as CharacterSet
        textField.stringValue = (textField.stringValue.components(separatedBy: characterSet) as NSArray).componentsJoined(by: "")
    }
}
like image 30
matanm Avatar answered Nov 03 '22 19:11

matanm