簡體   English   中英

當用戶在Swift中鍵入2個字符時,將焦點放在下一個文本字段上

[英]Set focus on a next textfield when user has typed 2 characters in Swift

我在拼命地尋找可以回答我問題的人。 我有一個帶有4個TextField的表單。 我希望當用戶鍵入2個字符時,焦點自動設置在下一個TextField上。

我嘗試了以下代碼:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    guard let text = textField.text else { return true }
    //let newLength = text.characters.count + string.characters.count - range.length


    if (text.characters.count == 2 && textField.tag == 10){
        textField.resignFirstResponder()
        self.txt_min_debut.becomeFirstResponder()
        return false
    }

    else if (text.characters.count == 2 && textField.tag == 11){
        textField.resignFirstResponder()
        self.txt_heure_fin.becomeFirstResponder()
        return false
    }

    else if (text.characters.count == 2 && textField.tag == 12){
        textField.resignFirstResponder()
        self.txt_min_fin.becomeFirstResponder()
        return false
    }

    else if (text.characters.count == 2 && textField.tag == 13){
        textField.resignFirstResponder()
        self.txt_cr.becomeFirstResponder()
        return false
    }

它不像我想要的那樣工作。 當我鍵入2個字符時,焦點仍然位於同一TextField上。 我必須輸入第三個字符才能繼續下一個。 另一個問題是del鍵被識別為鍵。 這意味着,當我鍵入2個字符時,無法再次對其進行編輯。

我正在使用Xcode和Swift 2。

更新了SWIFT3的代碼

@IBOutlet weak var tf1: UITextField!
@IBOutlet weak var tf2: UITextField!
@IBOutlet weak var tf3: UITextField!
@IBOutlet weak var tf4: UITextField!
override func viewDidLoad() {
    super.viewDidLoad()
    tf1.delegate = self
    tf2.delegate = self
    tf3.delegate = self
    tf4.delegate = self


    tf1.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
    tf2.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
    tf3.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
    tf4.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)

}
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    tf1.becomeFirstResponder()

}
func textFieldDidChange(textField: UITextField){

    let text = textField.text

    if text?.utf16.count==2{
        switch textField{
        case tf1:
            tf2.becomeFirstResponder()
        case tf2:
            tf3.becomeFirstResponder()
        case tf3:
            tf4.becomeFirstResponder()
        case tf4:
            tf4.resignFirstResponder()
        default:
            break
        }
    }else{

    }
}

試試這個代碼。

 @IBOutlet weak var textFrst: UITextField!
 @IBOutlet weak var textSecond: UITextField!
 @IBOutlet weak var textThird: UITextField!
 @IBOutlet weak var textFourth: UITextField!

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
    {

        let currentString: NSString = textField.text!
        let newString: NSString =
        currentString.stringByReplacingCharactersInRange(range, withString: string)
        let newLength: Int = newString.length
        if textField == textFrst {
            if newLength == 3 {
                textSecond.becomeFirstResponder()
            }
        }
        if textField == textSecond{
            if newLength == 3 {
                textThird.becomeFirstResponder()
            }
        }
        if textField  == textThird {
            if newLength == 3 {
                textFourth.becomeFirstResponder()
            }
        }
        if textField == textFourth {
            if newLength == 3 {
               self.view.endEditing(true)
            }
        }
        return true
    }

我有一個類似的問題,只需將textField.text與替換字符串連接起來即可解決此問題:

let enteredText = textField.text! + string

然后,諸如“如果enterText.characters.count == 2”之類的邏輯應能按預期工作。

感謝你們倆。

我測試了兩種解決方案,而Ben的一種則無法使用,它在TextField中僅保留1個字符而不是2個字符。

Bhagyalaxmi的解決方案似乎行得通,只是光標不會“視覺上”移動到下一個TextField(但是當您編寫字符時,它會放在合適的位置)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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