【发布时间】:2014-10-03 06:08:38
【问题描述】:
如何使用 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
}
我在另一个帖子上发现了这个。该解决方案效果很好,但我不确定这是否是最好的方法,但它是一种简短而干净的方法。
【问题讨论】:
-
我已经尝试过实现这个功能,但我不知道如何在每次按键时调用它。如果我尝试将 NSRange 作为 NSRange 的参数,我会看到错误。我可以看看你是如何让这个函数在每次按键时调用的实现吗?
标签: ios objective-c swift uitextfield