9

When using an external keyboard, my UITextView fires a shouldChangeTextInRange message just fine when I press the Backspace key ("backward delete"), but if I press Delete ("forward delete") then the method is never called at all, despite the view's text changing as expected. In case it matters, I'm using Swift and the latest iOS simulator.

If this is expected behavior, can someone point me to the documentation that explains it?

More importantly, is there a workaround?

Edit: submitted rdar://18909378. I've also discovered the same behavior when using cmd+backspace and opt+backspace. Very annoying!

phu
  • 1,199
  • 2
  • 10
  • 20

1 Answers1

1

I'm still seeing this issue on iOS 10. The best workaround I've come up with is to listen to the field's UIControlEventEditingChanged event and grab textField.text from there. This gives you the updated contents, but doesn't allow you to prevent the delete action like shouldChangeCharactersInRange does.

jszumski
  • 7,430
  • 11
  • 40
  • 53
  • Submitted rdar://29595896: "UITextField doesn't call shouldChangeCharactersInRange in response to a forward delete" which was close as duplicate of rdar://24966189 (still Open). – jszumski Dec 14 '16 at 14:10