I want to get the currently typed word in a UITextView
. A way to get a completely typed word can be found here UITEXTVIEW: Get the recent word typed in uitextview, however, I want to get the word while it is being typed (no matter where it is typed, beginning, middle, end of UITextView
).
I guess what defines a word being typed is a whitespace character followed by alphanumeric characters, or if the current location (somehow to figure out with range.location
) is the beginning of the UITextView
then whatever follows up should be considered as word as well. A word is finished being typed when another whitespace character follows.
I tried with:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text`
but I have a problem finding the correct range.
In short again: I need to find the substring in a UITextView
, where substring is the currently typed word.
EDIT: Because the question came up. I'm using NSLayoutManager
and bind a NSTextContainer
to it, which then is passed as layoutManager to a NSTextStorage
.
EDIT2: The main problem with (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
is that the range.location
is not the same as the indicator is, but always 1 less. If the cursor is at position 1, after typing one letter, range.location
would return 0. Any way around this? In addition the text
attribute of UITextView
seems to be off by 1 as well. When the text is foobar
and I output the UITextView.text
then I get fooba
instead. Therefore range.location+1
returns the exception Range {0, 1} out of bounds; string length 0'
EDIT3:
Maybe it is easier to get my wanted result with the NSTextStorage
instead of UITextView
?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…