diff --git a/packages/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm b/packages/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm index 9dca6a5567d9a0..c388d72f596b44 100644 --- a/packages/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm +++ b/packages/react-native/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm @@ -267,7 +267,12 @@ - (void)textViewDidChange:(__unused UITextView *)textView - (void)textViewDidChangeSelection:(__unused UITextView *)textView { if (_lastStringStateWasUpdatedWith && ![_lastStringStateWasUpdatedWith isEqual:_backedTextInputView.attributedText]) { - [self textViewDidChange:_backedTextInputView]; + BOOL shouldChangeText = [self textView:_backedTextInputView + shouldChangeTextInRange:NSMakeRange(0, _backedTextInputView.text.length) + replacementText:_backedTextInputView.text]; + if (shouldChangeText) { + [self textViewDidChange:_backedTextInputView]; + } _ignoreNextTextInputCall = YES; } _lastStringStateWasUpdatedWith = _backedTextInputView.attributedText;