gpt4 book ai didi

ios - 将 UITextField 限制为小数点后一位 Swift

转载 作者:可可西里 更新时间:2023-11-01 00:24:31 33 4
gpt4 key购买 nike

如何使用 Swift 将 UITextField 限制为一位小数?文本字段用于输入价格,因此我不能允许超过一位小数。如果我使用的是 Objective-C,我会使用以下代码:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

NSArray *sep = [newString componentsSeparatedByString:@"."];
if([sep count] >= 2)
{
NSString *sepStr=[NSString stringWithFormat:@"%@",[sep objectAtIndex:1]];
return !([sepStr length]>1);
}
return YES;
}

但由于 Swift 使用范围的方式不同,我无法将此代码转换为 Swift。第一行给我一个错误,说 NSRange is not convertible to Range<String.Index>

编辑:在我看到答案之前,我最终是这样做的:

func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
let tempRange = textField.text.rangeOfString(".", options: NSStringCompareOptions.LiteralSearch, range: nil, locale: nil)
if tempRange?.isEmpty == false && string == "." {
return false
}

return true
}

我在另一篇文章中找到了这个。这个解决方案工作正常,但我不确定它是否是最好的方法,但它是一种简短而干净的方法。

最佳答案

swift 4 和 Xcode 9.2

此解决方案只允许输入一个小数点,因此允许有效的 double 值。

// Only allows one decimal point
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

let newString = (textField.text! as NSString).replacingCharacters(in: range, with: string)
let arrayOfString = newString.components(separatedBy: ".")

if arrayOfString.count > 2 {
return false
}
return true
}

关于ios - 将 UITextField 限制为小数点后一位 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25225904/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com