Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在swift 2.0的UITextfield中只允许某些数字集_Ios_Swift_Uitextfield_Swift2 - Fatal编程技术网

Ios 如何在swift 2.0的UITextfield中只允许某些数字集

Ios 如何在swift 2.0的UITextfield中只允许某些数字集,ios,swift,uitextfield,swift2,Ios,Swift,Uitextfield,Swift2,我有一个UITextField,其中我得到了月份号作为输入。我成功地将UITextField中的字符数限制为2。但是我希望用户只输入从1到12的值,而不是其他值。当用户在func textField(textField:UITextField!,shouldChangeCharactersRange:NSRange,replacementString:string!)->Bool中键入数字时,必须同时执行此操作。如果我使用一个简单的If条件检查每个字符,并在else部分返回false,则文本字段

我有一个
UITextField
,其中我得到了月份号作为输入。我成功地将UITextField中的字符数限制为2。但是我希望用户只输入从
1到12的值,而不是其他值。当用户在
func textField(textField:UITextField!,shouldChangeCharactersRange:NSRange,replacementString:string!)->Bool中键入数字时,必须同时执行此操作。如果我使用一个简单的
If
条件检查每个字符,并在
else
部分返回false,则文本字段将不允许我使用清除或重新键入任何其他字符。有人帮帮我

func textField(textField: UITextField,
    shouldChangeCharactersInRange range: NSRange,
    replacementString string: String) -> Bool {

        // Create an `NSCharacterSet` set which includes everything *but* the digits
        let inverseSet = NSCharacterSet(charactersInString:"0123456789").invertedSet

        // At every character in this "inverseSet" contained in the string,
        // split the string up into components which exclude the characters
        // in this inverse set
        let components = string.componentsSeparatedByCharactersInSet(inverseSet)

        // Rejoin these components
        let filtered = components.joinWithSeparator("")  // use join("", components) if you are using Swift 1.2

        // If the original string is equal to the filtered string, i.e. if no
        // inverse characters were present to be eliminated, the input is valid
        // and the statement returns true; else it returns false
        return string == filtered

}

请参阅此链接--

=>您可以这样定义字符的限制:-

#define NUMBERS_ONLY @"1234567890"

#define  CHARACTER_LIMIT 2
=>根据定义限制字符,您可以使用并尝试以下方法:-

  - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string  
    {

        NSUInteger newLength = [textField.text length] + [string length] - range.length;

        NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS_ONLY] invertedSet];

        NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];

        return (([string isEqualToString:filtered])&&(newLength <= CHARACTER_LIMIT));

    }
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串
{
NSUInteger newLength=[textField.text length]+[string length]-range.length;
NSCharacterSet*cs=[[NSCharacterSet characterSetWithCharactersInString:仅限数字]逆变器集];
NSString*筛选=[[string componentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@”“];

return([string isEqualToString:filtered])&&(newLength您可以通过检查shouldchangeCharactersRange中的TextField值来同时执行此操作

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    let inputStr = textField.text?.stringByAppendingString(string)
    let inputInt = Int(inputStr!)
    if inputInt > 0 && inputInt < 13 {
        return true
    } else {
        return false
    }
}
func textField(textField:UITextField,shouldChangeCharactersRange:NSRange,replacementString:string)->Bool{
让inputStr=textField.text?.stringByAppendingString(字符串)
让inputInt=Int(inputStr!)
如果输入>0&&输入<13{
返回真值
}否则{
返回错误
}
}

将键盘类型设置为数字键盘

加上这个

func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {

    if let text = textField.text {

        let newStr = (text as NSString)
            .stringByReplacingCharactersInRange(range, withString: string)
        if newStr.isEmpty {
            return true
        }
        let intvalue = Int(newStr)
        return (intvalue >= 0 && intvalue <= 12)
    }
    return true
}
func textField(textField:UITextField!,shouldChangeCharactersRange:NSRange,replacementString:string!)->Bool{
如果let text=textField.text{
let newStr=(文本为NSString)
.StringByReplacingCharactersRange(范围,带字符串:字符串)
如果我是空的{
返回真值
}
让intvalue=Int(newStr)

return(intvalue>=0&&intvalue检查此设置以限制数字,并仅允许数字0到9

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if textField == mobileNumber {
        let aSet = NSCharacterSet(charactersIn:"0123456789").inverted
        let compSepByCharInSet = string.components(separatedBy: aSet)
        let numberFiltered = compSepByCharInSet.joined(separator: "")
        let length = (mobileNumber.text?.count)! + string.count - range.length
        return string == numberFiltered && length <= LIMIT
    }else if textField == userType {
        return false
    }
    return true
}
func textField(textField:UITextField,shouldChangeCharacters范围:NSRange,replacementString:string)->Bool{
如果textField==mobileNumber{
设aSet=NSCharacterSet(charactersIn:“0123456789”)。反转
让compSepByCharInSet=string.components(separatedBy:aSet)
让numberFiltered=compSepByCharInSet.joined(分隔符:“”)
让长度=(mobileNumber.text?.count)!+string.count-range.length

returnstring==numberFiltered&&length我只想根据前面的答案发布一个更简单的答案

在Swift 5.1上测试

考虑到您已经设置了
textField.keyboardType=.numberPad
,您可以执行以下操作:

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        guard let text = textField.text else {
            return true
        }
        let newStr = (text as NSString).replacingCharacters(in: range, with: string)

        guard let intValue = Int(newStr) else {
            return true
        }
        return intValue <= maxNumber // maxNumber: replace with your max number
    }
func textField(textField:UITextField,shouldChangeCharacters范围:NSRange,replacementString:string)->Bool{
guard let text=textField.text else{
返回真值
}
let newStr=(文本为NSString)。replacingCharacters(in:range,with:string)
保护let intValue=Int(newStr)else{
返回真值
}

返回此函数中的intValue add if条件以检查文本字段的值是否小于等于12且大于等于1。我已经尝试过此代码,它也允许13到99。此外,如果使用if条件并返回false,则即使退格,我也无法再编辑文本字段。此目标c代码与上面的swift答案没有什么不同。这只是有字符限制的objective c版本。
var length=(count(textField.text)+count(string)-range.length)
返回长度<3
这是用于简单长度约束的swift 1.2如果执行else部分并且返回
false
,则无法清除文本或重新输入文本。我不确定您的代码,但我已检查过,上面的代码没有阻止用户清除文本或重新输入文本。s对不起,我错了。你的代码也很好用,而且非常简单。这对我的代码非常有效
var length=(count(textField.text)+count(string)-range.length)
,并返回为
return length<3&(intvalue>0&&intvalue
?true:false
是多余的
return 1…12~=intvalue