快速检测iPhone键盘上的特定键[特别是后退/返回/删除键]

问题描述 投票:0回答:1

在我被问到之前,不,这不是重复的。我发现没有其他问题可以提供令人满意的答案。

我一直在编写一些代码来制作数据接口,但我不想使用日期选择器。

这是我用来获取 XX/XX/XX 格式的代码:

extension OneCreateAccountViewController {
    func textFieldDidChangeSelection(_ textField: UITextField) {
        
        if textField.placeholder == "DD/MM/YY" {

            
            if textField.text!.count >= 2 && textField.text!.count < 3  {

                textField.text! = "\(textField.text!)/"

            } else {
                
                if textField.text!.count >= 5 && textField.text!.count < 6   {

                    textField.text! = "\(textField.text!)/"

                } else {
                    
                    if textField.text!.count >= 9 {
                        
                        textField.text!.removeLast()
                   
                    }
                }
            }
        }
    }
}

正如您所看到的,它非常简单,但我的问题是,一旦插入“/”,无论发生什么,您都无法使用返回键删除。我想要一个特定的 else 语句,其作用类似于“else - 如果返回退格键并且最后一个字符是“”,则删除该字符。”

请帮助我专门拥有一个注册回车键的代码(即使它是一个简单的“如果按下回车键,则打印(“Hi”)”,如答案。)

ios swift uikit uitextfield
1个回答
0
投票

使用下面。

extension YourVC : UITextFieldDelegate {
    
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        let currentString = (textField.text ?? "") as NSString
        var newString = currentString.replacingCharacters(in: range, with: string)
        
        let textFieldText = textField.text as NSString?
        let value = textFieldText?.replacingCharacters(in: range, with: string) ?? ""
        let finalText : String = ((value.replacingOccurrences(of: " ", with: "").count > 6) ? (textFieldText ?? "") as String : value)
        textField.setText(to: finalText.grouping(every: 2, with: "/"), preservingCursor: true)
        return false
    }
}


extension String {
    func grouping(every groupSize: String.IndexDistance, with separator: Character) -> String {
        let cleanedUpCopy = replacingOccurrences(of: String(separator), with: "")
        return String(cleanedUpCopy.enumerated().map() {
            $0.offset % groupSize == 0 ? [separator, $0.element] : [$0.element]
        }.joined().dropFirst())
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.