如何限制用户输入到29位数并在swift中取两位小数?

时间:2016-12-27 08:50:49

标签: ios swift uitextfield

我希望用户在UITextfield中键入29位数并取两位小数,因此uitextfield的总长度应为32。

由于

4 个答案:

答案 0 :(得分:2)

使用textField委托方法来限制输入值,每当更新/更改文本字段文本时都会调用它。

  

func textField(_ textField:UITextField,shouldChangeCharactersIn   range:NSRange,replacementString string:String) - >布尔

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{
    let newString = NSString(string: textField.text!).replacingCharacters(in: range, with: string)

    if newString.characters.count > 32 { //restrict input upto 32 characters
        return false
    } else {

        let characterset = CharacterSet(charactersIn: "0123456789.") //0-9 digit and . is allowed

        if newString.rangeOfCharacter(from: characterset.inverted) == nil {

            let fullNumberArray = newString.components(separatedBy: ".") //Convert string into array
           if fullNumberArray.count > 2 { // more than 2 . exist
                return false
            }
           else if fullNumberArray.count == 2 { // Fractional part exist
                if fullNumberArray[0].characters.count <= 29 &&  fullNumberArray[1].characters.count <= 2 {
                    return true
                } }else {
                        // Only No decimal point exist , numeric digits only entered so far
                        if fullNumberArray[0].characters.count <= 29 {
                            return true
                            }
            }

        }

    }

    return false
}

注意 上面的代码允许输入最多29个数字和最多2个小数位数。用户可以输入不带小数的数字。如果你有一个限制只允许32个字符,并且有最小和最大29个数字没有分数范围,那么一些条件将会减少。

答案 1 :(得分:0)

if  let text1 = textField1.text,
    let text2 = textField2.text,
    text1.characters.count <= 29 &&
    text1.characters.count + text2.characters.count <= 32 {
}

这应该做的工作

答案 2 :(得分:0)

您可以使用

  
      
  • (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)范围   replacementString:(NSString *)string
  •   
当用户按下键盘上的任何字符时,

UITextField的委托。然后在委托中,您可以检查用户按下的字符数,如果用户按下字符长度为32,则可以验证其他输入文本是否包含32位或2位小数。 此外,您可以制定自己不同的逻辑。

答案 3 :(得分:0)

在textField委托方法中,限制输入字符的数量。下面的示例将字符数限制为32。注意,应确保输入字符串数大于0,以允许删除输入字符。

extension TableViewCell: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
    if string.count > 0 {
        return (textField.text?.count ?? 0) < 32
    }
    
    return true
}