UITextInput: selectedTextRange vs. markedTextRange?

ios, objective-c, protocols, uitextinput, uitextrange

Solution

From Apple documentation for `UITextInput`:

Marked text, which is part of multistage text input, represents provisionally inserted text that the user has yet to confirm. It is styled in a distinctive way. The range of marked text always contains within it a range of selected text, which might be a range of characters or the caret.

Hence `markedTextRange` gets useful with languages that requires multistage input, e.g. Japanese. In simple words: what user types is yet to be confirmed before it can be added to the value of the text input control is were `markedTextRange` gets into the game. GIF bellow demonstrates `markedTextRange` in action:

Notice slight sapphire background behind the unconfirmed hieroglyphs. Once text gets confirmed either by hitting enter/return, selecting option from suggestions or finger tap on text area after the marked text gets added to the input control value and background gets removed.

Notes:

- markedTextRange has nothing to do with read-only text

- I was not able to achieve multiple symbols selection within markedTextRange

Problem

Ok, so I know Apple's `UITextInput` protocol requires the two `UITextRange` properties `selectedTextRange` and `markedTextRange` and the documentation says that `selectedTextRange` is a subrange of `markedTextRange` which is an uncomfirmed text range by the user yatta yatta. That still doesn't make some things clear to me regarding how I ought to implement the two text ranges differently. Could someone visually explain to me the difference between `selectedTextRange` and `markedTextRange`? I know that when the `length` of `selectedTextRange` is `0` it indicates a blinking caret at `selectedTextRange`'s `location`. But what the heck is "marked text"?? I've only seen the following for text views in iOS: Which I assume represents the current `selectedTextRange`. What does `markedTextRange` look like? Or is it basically the exact same thing? I'm so confused :( Thanks in advance for any help! The documentation has proven itself useless in my understanding of how to implement the `UITextInput` protocol. EDIT Does implementing `markedTextRange` have anything to do with the fact that some text in a view could be "markable" but "readonly" and `selectedTextRange` indicates the subrange in the "marked text", `markedTextRange`, that is readwrite?

Original source