Set the maximum character length of a UITextField

前端 未结 30 2155
难免孤独
难免孤独 2020-11-22 02:27

How can I set the maximum amount of characters in a UITextField on the iPhone SDK when I load up a UIView?

30条回答
  •  情歌与酒
    2020-11-22 02:50

    Swift 2.0 +

    First of all create a class for this process. Lets call it StringValidator.swift.

    Then just paste the following code inside it.

    import Foundation
    
    extension String {
    
    func containsCharactersIn(matchCharacters: String) -> Bool {
    let characterSet = NSCharacterSet(charactersInString: matchCharacters)
    return self.rangeOfCharacterFromSet(characterSet) != nil
    }
    
    func containsOnlyCharactersIn(matchCharacters: String) -> Bool {
    let disallowedCharacterSet = NSCharacterSet(charactersInString: matchCharacters).invertedSet
    return self.rangeOfCharacterFromSet(disallowedCharacterSet) == nil
    }
    
    
    func doesNotContainCharactersIn(matchCharacters: String) -> Bool {
    let characterSet = NSCharacterSet(charactersInString: matchCharacters)
    return self.rangeOfCharacterFromSet(characterSet) == nil
    }
    
    func isNumeric() -> Bool
    {
    let scanner = NSScanner(string: self)
    scanner.locale = NSLocale.currentLocale()
    
    return scanner.scanDecimal(nil) && scanner.atEnd
    }
    
    }
    

    Now save the class.....

    Usage..

    Now goto your viewController.swift class and make your textfield's outlets as..

    @IBOutlet weak var contactEntryTxtFld: UITextField! //First textfield
    @IBOutlet weak var contactEntryTxtFld2: UITextField!   //Second textfield
    

    Now goto the textfield's shouldChangeCharactersInRange method and use like the following.

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
        if string.characters.count == 0 {
            return true
        }
        let latestText = textField.text ?? ""
        let checkAbleText = (latestText as NSString).stringByReplacingCharactersInRange(range, withString: string)
    
    
        switch textField {
    
        case contactEntryTxtFld:
            return checkAbleText.containsOnlyCharactersIn("0123456789") && prospectiveText.characters.count <= 5
    
        case contactEntryTxtFld2:
            return checkAbleText.containsOnlyCharactersIn("0123456789") && prospectiveText.characters.count <= 5
    
        default:
            return true
        }
    
    }
    

    Don't forget to set the delegate protocol/methods of textfields.

    Let me explain about this... I am using the simple extension process of string which I wrote inside an another class. Now I am just calling those extension methods from another class where I need them by adding check and maximum value.

    Features...

    1. It will set maximum limit of a particular textfield.
    2. It will set type of accepted keys for particular textfield.

    Types...

    containsOnlyCharactersIn //Accepts only Characters.

    containsCharactersIn //Accepts combination of characters

    doesNotContainsCharactersIn //Will not accept characters

    Hope this helped.... Thanks..

提交回复
热议问题