Skip to content

Instantly share code, notes, and snippets.

@krzyzanowskim
Created September 26, 2024 12:18
Show Gist options
  • Save krzyzanowskim/705afb82beef89e52add53d46ba03e81 to your computer and use it in GitHub Desktop.
Save krzyzanowskim/705afb82beef89e52add53d46ba03e81 to your computer and use it in GitHub Desktop.
FB15281730: UITextInput marked text (IME) methods not called for certain languages on certain devices (or systems)

UITextView does not call its marked text methods (setMarkedText, setAttributedMarkedText) for some languages, and does for other languages, but also for the same language it does not call on iOS, but does call on Catalyst (designed for iPad). Here's the example:

class TestView: UITextView {

    override func setMarkedText(_ markedText: String?, selectedRange: NSRange) {
        super.setMarkedText(markedText, selectedRange: selectedRange) // not called
    }

    override func setAttributedMarkedText(_ markedText: NSAttributedString?, selectedRange: NSRange) {
        super.setAttributedMarkedText(markedText, selectedRange: selectedRange) // not called
    }

    override func unmarkText() {
        super.unmarkText()
    }

}

To reproduce:

  1. Add Polish keyboard to iOS device
  2. Attach external keyboard
  3. Run the code and switch to Polish keyboard
  4. Press and hold letter "A" on keyboard. Character selection menu should appear (see attached video from iPad)
  5. Using arrow keys on keyboard navigate between selected character

Expected: for each change, setMarkedText method is called

Actual result: nothing

The above result is reproducible on iOS, but not on Catalyst (UIKit application run on macOS, in "Designed for iPad" mode). On Catalyst method setMarkedText is called for each change. Also when run the same code on iPad with external keyboard attached, setMarkedText is NOT called.

However, this situation is different when select another keyboard: Chinese. For Chinese keyboards, setMarkedText is called for each change (as I expect)

ScreenRecording_09-26-2024.14-02-55_1.mov
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment