在我被问到之前,不,这不是重复的。我发现没有其他问题可以提供令人满意的答案。
我一直在编写一些代码来制作数据接口,但我不想使用日期选择器。
这是我用来获取 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”)”,如答案。)
使用下面。
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())
}
}