首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITextField :在输入过程中限制最大允许值(数字)

UITextField :在输入过程中限制最大允许值(数字)
EN

Stack Overflow用户
提问于 2013-04-29 08:31:01
回答 5查看 9.4K关注 0票数 2

我有一个UITextField,我想将字段中允许的最大输入值限制为1000。当用户在内部输入数字时,一旦输入值大于999,则输入字段中的值将不再更新,除非用户输入值小于1000。

我认为我应该使用UITextField委托来限制输入:

代码语言:javascript
复制
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  //How to do
}

但我不知道如何实施。有什么建议吗?

==========Update=============

我的输入字段不仅允许用户输入整数,还允许浮动值,如999,03

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-29 08:35:08

您应该在上面的方法中执行以下操作:

代码语言:javascript
复制
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

//first, check if the new string is numeric only. If not, return NO;
NSCharacterSet *characterSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789,."] invertedSet];
if ([newString rangeOfCharacterFromSet:characterSet].location != NSNotFound)
{
    return NO;
}

return [newString doubleValue] < 1000;
票数 20
EN

Stack Overflow用户

发布于 2013-04-29 08:39:04

代码语言:javascript
复制
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if(textField.tag == 3)
    {
        if(textField.text.length >3 && range.length == 0)
        {
            return NO;
        }
        else
        {
            return YES;
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2016-08-03 22:25:28

我创建了一个具有帮助方法的类,该方法可以从项目中的任何地方调用。

Swift代码:

代码语言:javascript
复制
class TextFieldUtil: NSObject {

    //Here I am using integer as max value, but can change as you need
    class func validateMaxValue(textField: UITextField, maxValue: Int, range: NSRange, replacementString string: String) -> Bool {

        let newString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)

        //if delete all characteres from textfield
        if(newString.isEmpty) {
            return true
        }

        //check if the string is a valid number
        let numberValue = Int(newString)

        if(numberValue == nil) {
            return false
        }

        return numberValue <= maxValue
    }
}

然后,您可以在您的uiview控制器中使用任何textfield验证的textfield委托方法。

代码语言:javascript
复制
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

    if(textField == self.ageTextField) {
        return TextFieldUtil.validateMaxValue(textField, maxValue: 100, range: range, replacementString: string)
    }
    else if(textField == self.anyOtherTextField) {
        return TextFieldUtils.validateMaxValue(textField, maxValue: 1200, range: range, replacementString: string)
    }
    return true
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16274282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档