我如何检测文本字段中的任何文本变化?委托方法shouldChangeCharactersInRange适用于某些东西,但它并没有完全满足我的需求。因为在它返回YES之前,textField文本对其他观察器方法是不可用的。
例如,在我的代码calculateAndUpdateTextFields没有得到更新的文本,用户已经键入。
是他们的任何方式得到类似textChanged Java事件处理程序。
- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{
if (textField.tag == kTextFieldTagSubtotal
|| textField.tag == kTextFieldTagSubtotalDecimal
|| textField.tag == kTextFieldTagShipping
|| textField.tag == kTextFieldTagShippingDecimal)
{
[self calculateAndUpdateTextFields];
}
return YES;
}
从正确的方法做uitextfield文本更改回调:
我捕获发送到UITextField控件的字符,就像这样:
// Add a "textFieldDidChange" notification method to the text field control.
在objective - c中:
[textField addTarget:self
action:@selector(textFieldDidChange:)
forControlEvents:UIControlEventEditingChanged];
迅速:
textField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
然后在textFieldDidChange方法中,您可以检查textField的内容,并根据需要重新加载您的表视图。
你可以使用它并将calculateAndUpdateTextFields作为你的选择器。
一个是你可能有多个uitextfield。所以,给他们一个标签,然后你可以打开标签。下面是如何在任何类中设置一个观察者。
private func setupTextFieldNotification() {
NotificationCenter.default.addObserver(forName: UITextField.textDidChangeNotification, object: nil, queue: OperationQueue.main) { (notification) in
if let textField = notification.object as? UITextField, textField.tag == 100, let text = textField.text {
print(#line, text)
}
}
}
deinit {
NotificationCenter.default.removeObserver(self)
}