如何在Swift中将用户的TextField输入限制为数字?
您可以使用UITextFieldDelegate的shouldChangeCharactersInRange方法将用户的输入限制为数字:
UITextFieldDelegate
shouldChangeCharactersInRange
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { // Create an `NSCharacterSet` set which includes everything *but* the digits let inverseSet = NSCharacterSet(charactersInString:"0123456789").invertedSet // At every character in this "inverseSet" contained in the string, // split the string up into components which exclude the characters // in this inverse set let components = string.componentsSeparatedByCharactersInSet(inverseSet) // Rejoin these components let filtered = components.joinWithSeparator("") // use join("", components) if you are using Swift 1.2 // If the original string is equal to the filtered string, i.e. if no // inverse characters were present to be eliminated, the input is valid // and the statement returns true; else it returns false return string == filtered }
为Swift 3更新:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { // Create an `NSCharacterSet` set which includes everything *but* the digits let inverseSet = NSCharacterSet(charactersIn:"0123456789").inverted // At every character in this "inverseSet" contained in the string, // split the string up into components which exclude the characters // in this inverse set let components = string.components(separatedBy: inverseSet) // Rejoin these components let filtered = components.joined(separator: "") // use join("", components) if you are using Swift 1.2 // If the original string is equal to the filtered string, i.e. if no // inverse characters were present to be eliminated, the input is valid // and the statement returns true; else it returns false return string == filtered }