Kashif
Kashif

Reputation: 4632

Swift: Detecting iOS Keyboard text replacement in UITextField

iOS has a built-in functionality where user can set up text replacements in

Settings > General > Keyboards > Text Replacement

In my Swift iOS app's UITextField, I need to know when user used this text replacement so I can take appropriate action. My instinct was to use

func textField(tf: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

but interestingly, this function is not invoked on this kind of text replacement, are there any other ways to solve this?

Upvotes: 1

Views: 1300

Answers (1)

Steve Rosenberg
Steve Rosenberg

Reputation: 19524

I tested the shouldChangeCharactersInRange function in this setting and it does see the text expansion. I tested with:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

        print(string.characters.count)

        return true
  }

You can watch the character count jump immediately after the text expansion.

Make sure your textField is hooked up with an IBOutlet and you have set the class as a delegate (textField.delegate = self in viewDidLoad).

Once you see this working you can of course identify text expansion and handle any way you wish.

Upvotes: 2

Related Questions