在另一个文本字段的文本更改上更改UITextField的文本

时间:2016-01-14 06:26:22

标签: ios cocoa-touch uitextfield

我有六个文字字段。其中一个字段无法由用户编辑。相反,它接收来自其他五个的输入,将其压缩成一个字符串(每个输入之间有冒号,具有一定的排列)。

无论何时修改任何已启用的文本字段,第六个文本字段的内容都会更改,并且输入的顺序不会更改。因此,如果我在前五个文本字段中输入12345,则第六个将读取1:2:3:4:5。如果我将第二个文本字段的文本从2更改为two,则第六个文本字段也会更改为1:two:3:4:5

我已经知道如何执行此操作,创建五个全局变量,保存五个文本字段的值,然后从这些变量的连续中读取第六个。我无法弄清楚如何触发文本更改。

我尝试过使用它:

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

}

以及其他委托方法,但我不确定是否可行。

3 个答案:

答案 0 :(得分:5)

创建一个数组:

var myArray= [String]()

在viewDidLoad中执行此操作,当用户在文本字段中执行某些更改时分配操作(对所有文本字段/ 1,2,3,4,5执行此操作):

textField1.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingChanged)

textField2.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingChanged)

当用户编辑此方法时,将调用此方法:

func textFieldDidChange(textField: UITextField) {
    myArray.removeAll()

    if !textField1.isEmpty {
        myArray.append(textField1.text)
    }

    if !textField2.isEmpty {
        myArray.append(textField2.text)
    }

    if !textField3.isEmpty {
        myArray.append(textField3.text)
    }

    if !textField4.isEmpty {
        myArray.append(textField4.text)
    }

    if !textField5.isEmpty {
        myArray.append(textField5.text)
    }

    textField6.text = myArray.joinWithSeparator(":")
}

答案 1 :(得分:1)

您可以使用其名称访问特定的文本字段。例如 ;

func textFieldDidEndEditing(textField: UITextField) {

    sixthTextField.text = "\(firstTextField.text):\(secondTextField.text)\(thirdTextField.text):\(fourthTextField.text)\(fifthTextField.text)"

}

此方法将在textField结束编辑时执行代码。如果你想检查特定的textField;

func textFieldDidEndEditing(textField: UITextField) {
    if (textField == secondTextfield) {
       sixthTextField.text = "\(firstTextField.text):\(secondTextField.text)\(thirdTextField.text):\(fourthTextField.text)\(fifthTextField.text)"
   }
}

仅在secondTextField结束编辑时执行代码。

不要忘记将UITextFieldDelegate添加到您的类中,不要忘记在viewDidLoad中设置textField的委托。

class MyClass: UIViewController, UITextFieldDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        firstTextField.delegate = self
        secondTextField.delegate = self
        thirdTextField.delegate = self
        fourthTextField.delegate = self
        fifthTextField.delegate = self
        sixthTextField.delegate = self

    }
}

或者您可以为valueChanged事件的每个textField创建IBAction。与UIButton IBAction相同,只有差异才是事件。您应该选择valueChanged作为事件。

@IBAction func firstTextFieldValueChanged(sender: UITextField) {

         sixthTextField.text = "\(firstTextField.text):\(secondTextField.text):\(thirdTextField.text):\(fourthTextField.text):\(fifthTextField.text)"
}

@IBAction func secondTextFieldValueChanged(sender: UITextField) {

         sixthTextField.text = "\(firstTextField.text):\(secondTextField.text):\(thirdTextField.text):\(fourthTextField.text):\(fifthTextField.text)"
}

@IBAction func thirdTextFieldValueChanged(sender: UITextField) {

         sixthTextField.text = "\(firstTextField.text):\(secondTextField.text):\(thirdTextField.text):\(fourthTextField.text):\(fifthTextField.text)"
}

@IBAction func fourthTextFieldValueChanged(sender: UITextField) {

         sixthTextField.text = "\(firstTextField.text):\(secondTextField.text):\(thirdTextField.text):\(fourthTextField.text):\(fifthTextField.text)"
}

@IBAction func fifthTextFieldValueChanged(sender: UITextField) {

         sixthTextField.text = "\(firstTextField.text):\(secondTextField.text):\(thirdTextField.text):\(fourthTextField.text):\(fifthTextField.text)"
}

答案 2 :(得分:1)

您可以实施didEndEditing委托并在那里执行您的逻辑。

func textFieldDidEndEditing(textField: UITextField) {
    var text1:String?
    var text2:String?
    var text3:String?
    var text4:String?
    var text5:String?

    if ((textField1.text) != nil) {
        text1 = textField1.text
    } else {
        text1 = ""
    }

    if ((textField2.text) != nil) {
        text2 = textField2.text
    } else {
        text2 = ""
    }

    if ((textField3.text) != nil) {
        text3 = textField3.text
    } else {
        text3 = ""
    }

    if ((textField4.text) != nil) {
        text4 = textField4.text
    } else {
        text4 = ""
    }

    if ((textField5.text) != nil) {
        text5 = textField5.text
    } else {
        text5 = ""
    }

    textField6.text = String(format: "%@:%@:%@:%@:%@", text1, a2, a3, a4, a5)
}

添加文本字段委托并将其实现到textfield1 - textfield5到