代码之家  ›  专栏  ›  技术社区  ›  Emre Önder

将文本设置为suuldChangeCharactersin中的UITextField后,光标移到末尾

  •  2
  • Emre Önder  · 技术社区  · 7 年前

    我有文本标签,上面有电话号码。我在用户输入时屏蔽电话号码,以便 shouldChangeCharactersIn 功能;

    • 将该输入添加到已写入的文本中 UITextField
    • 屏蔽文本并将其设置为
    • 返回false

    我的问题是在我设置 UITextfield 输入框 应该更改字符 功能)我怎么做?谢谢您。

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
        guard CharacterSet(charactersIn: "0123456789").isSuperset(of: CharacterSet(charactersIn: string)) else {
            return false
        }
        if let text = textField.text {
            let newLength = text.count + string.count - range.length
            let newText = text + string
    
            let textFieldText: NSString = (textField.text ?? "") as NSString
            let txtAfterUpdate = textFieldText.replacingCharacters(in: range, with: string)
                if(newLength <= 15){
                    //textField.text = txtAfterUpdate
                    textField.text = txtAfterUpdate.digits.applyPatternOnNumbers()
                    return false
                }
                return newLength <= 15
        }
        return true
    }
    

    遮罩功能:

    func applyPatternOnNumbers(pattern: String = "(###) ### ## ##", replacmentCharacter: Character = "#") -> String {
    var pureNumber = self.replacingOccurrences( of: "[^0-9]", with: "", options: .regularExpression)
    for index in 0 ..< pattern.count {
        guard index < pureNumber.count else { return pureNumber }
        let stringIndex = String.Index(encodedOffset: index)
        let patternCharacter = pattern[stringIndex]
        guard patternCharacter != replacmentCharacter else { continue }
        pureNumber.insert(patternCharacter, at: stringIndex)
    }
    return pureNumber
    }
    

    我想要的GIF

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  3
  •   Tm Goyani    7 年前
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
            guard CharacterSet(charactersIn: "0123456789").isSuperset(of: CharacterSet(charactersIn: string)) else {
                return false
            }
            if let text = textField.text {
                let newLength = text.count + string.count - range.length
                let newText = text + string
    
                let textFieldText: NSString = (textField.text ?? "") as NSString
                let txtAfterUpdate = textFieldText.replacingCharacters(in: range, with: string)
                if(newLength <= 15){
    
                    var currentPosition = 0
                    if let selectedRange = textField.selectedTextRange {
                        currentPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)
                    }
    
                    if(string == ""){
                        if(currentPosition == 2){
                            if(textField.text!.count > 2){
                                currentPosition = 1
                            }else{
                                currentPosition = 0
                            }
                        }else if(currentPosition == 7){
                            currentPosition = 4
                        }else if(currentPosition == 11){
                            currentPosition = 9
                        }else if(currentPosition == 14){
                            currentPosition = 12
                        }else{
                            if(currentPosition != 1){
                                currentPosition = currentPosition - 1
                            }
                        }
                    }else{
                        if(currentPosition == 0){
                            currentPosition = 2
                        }else if(currentPosition == 4){
                            currentPosition = 7
                        }else if(currentPosition == 9){
                            currentPosition = 11
                        }else if(currentPosition == 12){
                            currentPosition = 14
                        }else{
                            currentPosition = currentPosition + 1
                        }
                    }
    
                    textField.text = txtAfterUpdate.applyPatternOnNumbers()
                    print("textField Length -> : \(textField.text?.count ?? 0)")
    
                        if let newPosition = textField.position(from: textField.beginningOfDocument, offset: currentPosition) {
                            textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
                        }
    
                    return false
                }
                return newLength <= 15
            }
            return true
        }