[英]Auto switching between UITextFields with Swift
我在一個UIView
有4個UITextFields
,如下所示:
每個UITextField
限制為4個字符。 我想實現之間的自動切換UITextFields
與每個數字符UITextField
。
我使用shouldChangeCharactersIn
作為限制字符:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let maxLength = 4
var newString = String()
let currentString: NSString = textField.text! as NSString
newString = currentString.replacingCharacters(in: range, with: string)
return newString.length <= maxLength
}
這是我的切換工具:
func textFieldDidChange(_ textField: UITextField){
let text = textField.text
if text?.utf16.count == 4 {
switch textField {
case firstPartTextField:
secondPartTextField.becomeFirstResponder()
case secondPartTextField:
thirdPartTextField.becomeFirstResponder()
case thirdPartTextField:
fourthPartTextField.becomeFirstResponder()
default:
break
}
}
}
我的問題是在刪除文本時切換到以前的UITextField
,當UITextField
為空時我無法檢測到BackSpace事件。
在viewDidLoad()中為textField添加目標
firstTxt.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
secTxt.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
thirdTxt.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
fourTXt.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
比創建選擇器方法
func textFieldDidChange(textField:UITextField){
let text = textField.text
if text?.utf16.count == 1{
switch textField{
case firstTxt:
secTxt.becomeFirstResponder()
case secTxt:
thirdTxt.becomeFirstResponder()
case thirdTxt:
fourTXt.becomeFirstResponder()
case fourTXt:
fourTXt.resignFirstResponder()
default:
break
}
}else{
}
}
收集所有文本字段的出口,並按如下方式配置它們:
OutletCollection: @IBOutlet var textfields: [UITextField]!
將此添加到viewDidLoad中:
func textFieldDidBeginEditing(_ textField: UITextField) {
textField.text = ""
}
在目標函數中,將以這種方式限制計數:
func textFieldDidChange(textField: UITextField) { let text = textField.text! if text.utf16.count >= 4 { if textField.tag < 4 { codeTextfields[textField.tag + 1].becomeFirstResponder() } else { textField.resignFirstResponder() } } }
這將改變您的委托方法之一:
func textFieldDidBeginEditing(_ textField: UITextField) { textField.text = "" }
精煉版本的答案如下: 如何在ios中以編程方式自動將光標從一個文本字段移動到另一個文本字段?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.