首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UITextField应仅接受数字值

UITextField应仅接受数字值
EN

Stack Overflow用户
提问于 2012-05-24 17:43:40
回答 14查看 81.1K关注 0票数 31

我有UITexfields,我希望它应该只接受数字其他显示警报,输入一个数字值。我希望motionSicknessTextFiled应该只接受数字

代码语言:javascript
复制
NSString*dogswithMotionSickness=motionSicknessTextField.text;
NSString*valueOne=cereniaTextField.text;
NSString*valueTwo=prescriptionTextField.text;
NSString*valueThree=otherMeansTextField.text;
NSString*valueFour=overtheCounterTextField.text;
EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2012-05-24 17:45:57

在您从中获得这些值的任何UITextField中,您都可以指定当有人在文本字段内触摸时要显示的键盘类型。

例如纯数字键盘。

类似以下屏幕截图的

在使用XIB和Xcode内置的Interface Builder时,这很容易设置,但如果您想通过编程来理解这一点,请看一下苹果的UITextInputTraits protocol reference page, specifically the keyboardType property信息。

要过滤掉标点符号,请设置文本字段的委托并设置shouldChangeCharactersInRange方法:

代码语言:javascript
复制
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSCharacterSet *numbersOnly = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    NSCharacterSet *characterSetFromTextField = [NSCharacterSet characterSetWithCharactersInString:textField.text];

    BOOL stringIsValid = [numbersOnly isSupersetOfSet:characterSetFromTextField];
    return stringIsValid;
}
票数 58
EN

Stack Overflow用户

发布于 2014-03-14 19:22:41

Objective C

代码语言:javascript
复制
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (!string.length) 
        return YES;

    if (textField == self.tmpTextField)
    {
        NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
        NSString *expression = @"^([0-9]+)?(\\.([0-9]{1,2})?)?$";
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression 
                                                                               options:NSRegularExpressionCaseInsensitive 
                                                                                 error:nil];
        NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString
                                                            options:0
                                                              range:NSMakeRange(0, [newString length])];        
        if (numberOfMatches == 0)
            return NO;        
    }
    return YES;
}

Swift 3.0

代码语言:javascript
复制
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if !string.characters.count {
        return true
    }
    do {
        if textField == self.tmpTextField {
            var newString = textField.text.replacingCharacters(inRange: range, with: string)
            var expression = "^([0-9]+)?(\\.([0-9]{1,2})?)?$"
            var regex = try NSRegularExpression(pattern: expression, options: NSRegularExpressionCaseInsensitive)
            var numberOfMatches = regex.numberOfMatches(inString: newString, options: [], range: NSRange(location: 0, length: newString.characters.count))
            if numberOfMatches == 0 {
                return false
            }
        }
    }
    catch let error {
    }
    return true
}
票数 26
EN

Stack Overflow用户

发布于 2012-05-24 17:47:10

代码语言:javascript
复制
[textField setKeyboardType:UIKeyboardTypeNumberPad];
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10734959

复制
相关文章

相似问题

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