Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
输入文本字段swift 4的字符数和字符类型限制_Swift_Uitextfielddelegate - Fatal编程技术网

输入文本字段swift 4的字符数和字符类型限制

输入文本字段swift 4的字符数和字符类型限制,swift,uitextfielddelegate,Swift,Uitextfielddelegate,我想对textfield设置一个限制。示例:最大字符数应为6,并且字符只能是数字。但是我不能把这两个控件放在一个函数中 文本计数的第一个func: func textFieldCharacterCountLimit(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { let maxLength = 6 le

我想对textfield设置一个限制。示例:最大字符数应为6,并且字符只能是数字。但是我不能把这两个控件放在一个函数中

文本计数的第一个func:

func textFieldCharacterCountLimit(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let maxLength = 6
    let currentString: NSString = txt_phone_no_verification_code.text! as NSString
    let newString: NSString =
        currentString.replacingCharacters(in: range, with: string) as NSString
    return newString.length <= maxLength
}
func textFieldCharacterTypeLimit(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let allowedCharacters = CharacterSet.decimalDigits
    let characterSet = CharacterSet(charactersIn: string)
    return allowedCharacters.isSuperset(of: characterSet)
}

除此之外,它还给出了一个错误。和textFieldCharacterCountLimit函数不起作用。我想我得到了一个错误,因为两个函数用return影响相同的textfield。谢谢

您不能只编造委托方法名称。您需要实现适当的方法,并在一个方法中执行所有需要的检查

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

    return newString.rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil
}

只允许在特定范围的给定文本字段中输入指定的字符集

   func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if string.count == 0 {
            return true
        }
        let currentText = textField.text ?? ""
        let prospectiveText = (currentText as NSString).replacingCharacters(in: range, with: string)

        return prospectiveText.containsOnlyCharactersIn(matchCharacters: "0123456789") &&
            prospectiveText.count <= 6

    }
如何编程仅接受最大长度数字输入的iOS文本字段


这项工作没有任何扩展。这就是为什么我最好把它作为对我问题的回答。顺便说一句,我不知道这句话:“你不能只是编造委托方法的名称。”谢谢你的详细介绍。
extension String {

    // Returns true if the string contains only characters found in matchCharacters.
    func containsOnlyCharactersIn(matchCharacters: String) -> Bool {

        let disallowedCharacterSet = NSCharacterSet(charactersIn: matchCharacters).inverted
        return self.rangeOfCharacter(from: disallowedCharacterSet as CharacterSet) == nil
    }
}