我使用这段代码来限制用户对键盘的输入。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let allowedCharacters = CharacterSet.init(charactersIn: ".0123456789")
let characterSet = NSCharacterSet(charactersIn: string)
return allowedCharacters.isSuperset(of: characterSet as CharacterSet)
}
更新2: 因此99.9%的此解决方案效果很好,不幸的是,周期/小数点没有注册。不确定为什么会这样?
答案 0 :(得分:0)
这似乎是Swift中的一个错误,Swift问题跟踪器上存在多个问题:https://bugs.swift.org/browse/SR-3311,https://bugs.swift.org/browse/SR-3667
在修复此问题之前,您可以使用以下扩展名来解决此问题:
extension CharacterSet {
func isSupersetOf(other: CharacterSet) -> Bool {
return CFCharacterSetIsSupersetOfSet(self as CFCharacterSet, (other as NSCharacterSet).copy() as! CFCharacterSet)
}
}
请注意,您需要将characterSet
变量从NSCharacterSet
类型更改为CharacterSet
才能在示例中使用该扩展程序。