从一个文本字段移动到另一个

时间:2017-06-21 04:01:44

标签: ios swift xcode

当我写两个数字时,如何让文字字段-1移动到Swift的另一个文本字段-2?

enter image description here

当我写22时,我想自动移动到另一个文本字段-2。

我试过了,但它没有用:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    if let text = textField.text {

        let newStr = (text as NSString)
            .stringByReplacingCharactersInRange(range, withString: string)
        if newStr.isEmpty {
            return true
        }
        let intvalue = Int(newStr)

        if textField.tag == 101 { print("101") // only 2 integer
             return (intvalue >= 0 && intvalue <= 99) ? true : false
        }
        else if textField.tag == 102 { print("102") // only 4 integer
             return (intvalue >= 0 && intvalue <= 9999) ? true : false
        }

    }
    return true
}

4 个答案:

答案 0 :(得分:3)

您应该为textField的editingChanged事件添加一个目标,如下所示,或者只是将一个动作从storyboard拖到您的班级中:

textField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: UIControlEvents.editingChanged)

然后在你的选择器中执行以下操作:

func textFieldDidChange(_ textField: UITextField) {
    if textField.tag == 101 && textField.text!.characters.count >= 2 {
        secondTextField.becomeFirstResponder()
    }
}

答案 1 :(得分:3)

textField.addTarget(self, action: #selector(textDidChanged(textField:)), for: .editingChanged)


func textDidChanged(textField: UITextField)
{
    if (textField.text) == "22"
    {
        newTextField.becomeFirstResponder()
    }
}

为两个文本字段添加委托 还将UITextFieldDelegate添加到您的viewcontroller

答案 2 :(得分:3)

为这两个文本字段创建IBAction,并检查IBAction中的第一个文本字段的字符数。如果count为2秒,则文本字段将变为活动状态。

Create IBAction

@IBAction func textEntered(_ sender: UITextField) {
    if sender.tag == 101 && sender.text?.characters.count == 2
    {
      (self.view.subviews.first(where: { $0.tag == 102 }) as! UITextField).becomeFirstResponder()
    }
  }

答案 3 :(得分:2)

无需做更多, 只需修改您的shouldChangeCharactersIn range

即可
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let finalText = (textField.text ?? "")// + string

    if textField === self.textField1! && finalText.characters.count >= 2 {
        self.textField1.resignFirstResponder()
        self.textField2.becomeFirstResponder()
        return false
    }
    else if textField === self.textField2! && finalText.characters.count >= 4 {
        self.textField2.resignFirstResponder()
        self.textField1.becomeFirstResponder()
        return false
    }

    return true
   }

尽量不要在代码中使用tag,因为在您参与项目后其他程序员无法理解。