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

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

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

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

我试过用这个:

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

以及其他委托方法,但我不确定这是怎么回事。

创建一个数组:

 var myArray= [String]() 

在viewDidLoad中执行此操作,当用户在文本字段中进行一些更改时分配操作(对所有textfield / 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(":") } 

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

 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相同,只有diffrence才是事件。 您应该选择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)" } 

您可以实现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) } 

添加textfield委托并将其实现到textfield1 – textfield5 to