62 iphone uitextfield ipad ios swift
我希望用户只在a中输入数值UITextField.在iPhone上我们可以显示数字键盘,但在iPad上用户可以切换到任何键盘.
有没有办法限制用户只输入数字值UITextField?
Mr *_*r H 77
这是我的2分.(仅在Swift 2上测试过)
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let aSet = NSCharacterSet(charactersInString:"0123456789").invertedSet
let compSepByCharInSet = string.componentsSeparatedByCharactersInSet(aSet)
let numberFiltered = compSepByCharInSet.joinWithSeparator("")
return string == numberFiltered
}
Run Code Online (Sandbox Code Playgroud)
这只是一点点严格.也没有小数点.
希望能帮助到你 :)
PS:无论如何,我认为你照顾了代表.
更新:Swift 3.0:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let aSet = NSCharacterSet(charactersIn:"0123456789").inverted
let compSepByCharInSet = string.components(separatedBy: aSet)
let numberFiltered = compSepByCharInSet.joined(separator: "")
return string == numberFiltered
}
Run Code Online (Sandbox Code Playgroud)
Hir*_*hal 71
swift 3.0及以上版本的解决方案
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{
let allowedCharacters = CharacterSet.decimalDigits
let characterSet = CharacterSet(charactersIn: string)
return allowedCharacters.isSuperset(of: characterSet)
}
Run Code Online (Sandbox Code Playgroud)
iOS*_*iOS 17
在swift 4.1和Xcode 9.4.1中
将UITextFieldDelegate添加到您的类
class YourViewController: UIViewController, UITextFieldDelegate
Run Code Online (Sandbox Code Playgroud)
然后在viewDidLoad()中编写此代码
mobileNoTF.delegate = self
Run Code Online (Sandbox Code Playgroud)
写下这个textfield委托函数
//MARK - UITextField Delegates
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
//For mobile numer validation
if textField == mobileNoTF {
let allowedCharacters = CharacterSet(charactersIn:"+0123456789 ")//Here change this characters based on your requirement
let characterSet = CharacterSet(charactersIn: string)
return allowedCharacters.isSuperset(of: characterSet)
}
return true
}
Run Code Online (Sandbox Code Playgroud)
小智 12
Swift 2.0
仅允许数字和一个"." uitextfield中的十进制数.
func textField(textField: UITextField,shouldChangeCharactersInRange range: NSRange,replacementString string: String) -> Bool
{
let newCharacters = NSCharacterSet(charactersInString: string)
let boolIsNumber = NSCharacterSet.decimalDigitCharacterSet().isSupersetOfSet(newCharacters)
if boolIsNumber == true {
return true
} else {
if string == "." {
let countdots = textField.text!.componentsSeparatedByString(".").count - 1
if countdots == 0 {
return true
} else {
if countdots > 0 && string == "." {
return false
} else {
return true
}
}
} else {
return false
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Swift 3中使用单个(.)点接受文本字段中的十进制值
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let inverseSet = NSCharacterSet(charactersIn:"0123456789").inverted
let components = string.components(separatedBy: inverseSet)
let filtered = components.joined(separator: "")
if filtered == string {
return true
} else {
if string == "." {
let countdots = textField.text!.components(separatedBy:".").count - 1
if countdots == 0 {
return true
}else{
if countdots > 0 && string == "." {
return false
} else {
return true
}
}
}else{
return false
}
}
}
Run Code Online (Sandbox Code Playgroud)
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
// return true if the replacementString only contains numeric characters
let digits = NSCharacterSet.decimalDigitCharacterSet()
for c in string {
if !digits.characterIsMember(c) {
return false
}
}
return true
}
Run Code Online (Sandbox Code Playgroud)
即使用户切换键盘或尝试将非数字字符串粘贴到文本字段中,此解决方案也将起作用.
确保设置delegate相应文本字段的属性.
仅IPhone解决方案
无论您从哪个UITextField获取这些值,您都可以指定当某人触摸文本字段时要显示的键盘类型.
EG是纯数字键盘.
喜欢这个截图:
Ipad的
iPad不支持数字键盘,因此您可以选择不支持iPad,验证提交后的字段,也可以按照其他建议在iPad上运行时创建理智的行为.
使用数字格式化程序
斯威夫特 4.x
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let s = NSString(string: textField.text ?? "").replacingCharacters(in: range, with: string)
guard !s.isEmpty else { return true }
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .none
return numberFormatter.number(from: s)?.intValue != nil
}
Run Code Online (Sandbox Code Playgroud)
像这样扩展你的视图控制器:
class MyViewController: UIViewController, UITextFieldDelegate
Run Code Online (Sandbox Code Playgroud)
在 viewDidLoad 函数中,像这样扩展到您的文本字段:
myTextField.delegate = self
Run Code Online (Sandbox Code Playgroud)
然后使用以下函数:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let isNumber = CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: string))
let withDecimal = (
string == NumberFormatter().decimalSeparator &&
textField.text?.contains(string) == false
)
return isNumber || withDecimal
}
Run Code Online (Sandbox Code Playgroud)
这将确保用户只能输入十进制数字。
Swift 4 + 仅接受数字并接受一个分隔符
Bli*_*nja -2
首先添加delegate和keyBoradTypetextField
textField.delegate=self;
textField.keyboardType = UIKeyboardTypeNumberPad;
比必须使用textField.delegate这样的方法 -
- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString: (NSString *)string
{
if (!string.length)
{
return YES;
}
if ([string intValue])
{
return YES;
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76036 次 |
| 最近记录: |