我正在尝试使用委托将文本字段中的值传递给另一个视图。这就是我试图实现的方法。
在将值传递到主视图的第二个视图中,这是我写的。。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if let _ = raDelegate {
raDelegate?.durationChanged(hrs: string)
}
return true
}
在第一个视图中,这就是我所拥有的...
func durationChanged(hrs: String) {
myView.durationTextField.text = hrs
}
[现在的问题是,如果我在文本字段中输入[5],在durationChanged
函数中,在应用断点时,我在hrs
中得到的值本身就是“ 5”。但是,当我删除断点并运行时,最后打印到myView.durationTextField.text
的是55
。另外,如果我在此之后打印“ 7”,则“ 55”将被替换为“ 77”。理想情况下,我应该得到的是“ 57”。
您使用错误。shouldChangeCharactersIn函数上的字符串不是textField的值。
例如: 1. textField.text =“” 2.输入5->范围为(0,0),字符串为5,textField.text =“”(textField.text尚未更改,取决于委托函数的返回值,如果为true,它将替换range
中带有字符串的textField.text) 3.输入7->范围是(1,0),字符串是7,textField.text =“ 5” 4.输入退格键->范围是(2,1),字符串是“”,textField =“ 57”
4之后,您的textField.text =“ 5”
所以您可以修改代码:
let stringAfterChanged = ((textField.text ?? "") as NSString).replacingCharacters(in: range, with: string)
raDelegate?.durationChanged(hrs: stringAfterChanged)