Ios 更改另一个文本字段的文本时更改UITextField的文本

Ios 更改另一个文本字段的文本时更改UITextField的文本,ios,cocoa-touch,uitextfield,Ios,Cocoa Touch,Uitextfield,我有六个文本字段。用户无法编辑其中一个字段。相反,它从其他五个输入中接收输入,将其压缩为一个字符串(每个输入之间有冒号,并且有一定的排列) 任何时候修改任何已启用的文本字段,第六个文本字段的内容都会更改,并且输入的顺序不会更改。因此,如果我在前五个文本字段中输入1,2,3,4,5,第六个文本字段将显示1:2:3:4:5。如果我将第二个文本字段的文本从2更改为two,则第六个文本字段的文本也将更改为1:two:3:4:5 我知道如何做到这一点,创建五个全局变量,保存五个文本字段的值,然后从这些字段

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

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

我知道如何做到这一点,创建五个全局变量,保存五个文本字段的值,然后从这些字段的concat中读取第六个。我不知道如何触发文本更改

我试过用这个:

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

}

与其他委托方法一起使用,但我不确定该怎么做。

您可以通过名称访问特定的文本字段。比如,

func textFieldDidEndEditing(textField: UITextField) {

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

}
当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事件的每个文本字段创建iAction。与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)"
}

您可以实现
didEndEditing
delegate并在那里执行您的逻辑

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以创建数组:

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

当用户编辑某些内容时,将调用此方法:

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:2:4:5
”?@the_-UB,是的。跳过那个,然后跳过后面的冒号。谢谢。值得注意的是,
“:”.join(myArray)
在Swift 2上不起作用。必须使用myArray.joinWithSeparator(“:”)。
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(":")
}