问题限制十进制长度
Issue limiting decimal length
我用来限制我所有 UITexField
中最多 1 个十进制数的代码:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let computationString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
let arrayOfSubStrings = computationString.componentsSeparatedByString(",")
if (arrayOfSubStrings.count == 1 && computationString.characters.count > 2) {
return false
} else if arrayOfSubStrings.count == 2 {
let stringPostDecimal = arrayOfSubStrings[1]
return stringPostDecimal.characters.count <= 1
}
return true
}
但我只知道有两种类型的小数位:带点和带逗号。
例如,我的 iOS 模拟器使用点,我的 iPhone 使用逗号。
那么我该如何解决这个问题,同时停止这两个问题呢?
有一种方法componentsSeparatedByCharactersInSet
可以考虑多个分隔符
let commaDotCharacterSet = NSCharacterSet(charactersInString: ",.")
let arrayOfSubStrings = computationString.componentsSeparatedByCharactersInSet(commaDotCharacterSet)
或者也包括当前语言环境的小数点分隔符
let localeDecimalSeparator = NSLocale.currentLocale().objectForKey(NSLocaleDecimalSeparator) as! String
let commaDotLocaleSeparatorCharacterSet = NSCharacterSet(charactersInString: ",." + localeDecimalSeparator)
let arrayOfSubStrings = computationString.componentsSeparatedByCharactersInSet(commaDotLocaleSeparatorCharacterSet)
试试这个。
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let computationString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
let arrayOfSubStrings = computationString.computationString.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: ".,"))
if (arrayOfSubStrings.count == 1 && computationString.characters.count > 2) {
return false
} else if arrayOfSubStrings.count == 2 {
let stringPostDecimal = arrayOfSubStrings[1]
return stringPostDecimal.characters.count <= 1
}
return true
}
我用来限制我所有 UITexField
中最多 1 个十进制数的代码:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let computationString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
let arrayOfSubStrings = computationString.componentsSeparatedByString(",")
if (arrayOfSubStrings.count == 1 && computationString.characters.count > 2) {
return false
} else if arrayOfSubStrings.count == 2 {
let stringPostDecimal = arrayOfSubStrings[1]
return stringPostDecimal.characters.count <= 1
}
return true
}
但我只知道有两种类型的小数位:带点和带逗号。
例如,我的 iOS 模拟器使用点,我的 iPhone 使用逗号。 那么我该如何解决这个问题,同时停止这两个问题呢?
有一种方法componentsSeparatedByCharactersInSet
可以考虑多个分隔符
let commaDotCharacterSet = NSCharacterSet(charactersInString: ",.")
let arrayOfSubStrings = computationString.componentsSeparatedByCharactersInSet(commaDotCharacterSet)
或者也包括当前语言环境的小数点分隔符
let localeDecimalSeparator = NSLocale.currentLocale().objectForKey(NSLocaleDecimalSeparator) as! String
let commaDotLocaleSeparatorCharacterSet = NSCharacterSet(charactersInString: ",." + localeDecimalSeparator)
let arrayOfSubStrings = computationString.componentsSeparatedByCharactersInSet(commaDotLocaleSeparatorCharacterSet)
试试这个。
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let computationString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
let arrayOfSubStrings = computationString.computationString.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: ".,"))
if (arrayOfSubStrings.count == 1 && computationString.characters.count > 2) {
return false
} else if arrayOfSubStrings.count == 2 {
let stringPostDecimal = arrayOfSubStrings[1]
return stringPostDecimal.characters.count <= 1
}
return true
}