我有六个文字字段。其中一个字段无法由用户编辑。相反,它接收来自其他五个的输入,将其压缩成一个字符串(每个输入之间有冒号,具有一定的排列)。
无论何时修改任何已启用的文本字段,第六个文本字段的内容都会更改,并且输入的顺序不会更改。因此,如果我在前五个文本字段中输入1
,2
,3
,4
,5
,则第六个将读取1:2:3:4:5
。如果我将第二个文本字段的文本从2
更改为two
,则第六个文本字段也会更改为1:two:3:4:5
。
我已经知道如何执行此操作,创建五个全局变量,保存五个文本字段的值,然后从这些变量的连续中读取第六个。我无法弄清楚如何触发文本更改。
我尝试过使用它:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
}
以及其他委托方法,但我不确定是否可行。
答案 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到