簡體   English   中英

使用Swift自動在UITextField之間切換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM