UITextView 委托行为与自定义 iOS 键盘 (SwiftKey) 不同
Posted
技术标签:
【中文标题】UITextView 委托行为与自定义 iOS 键盘 (SwiftKey) 不同【英文标题】:UITextView Delegates Behaving Differently with Custom iOS Keyboards (SwiftKey) 【发布时间】:2014-11-29 08:04:10 【问题描述】:使用 shouldChangeTextInRange
委托来检测某些短语,在输入 UITextView
时会在普通键盘和自定义键盘(如 SwiftKey)之间切换时提供不同的 range
和 text
值(在相同的情况下)。
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text ...
例如:
在我使用普通键盘键入“ABCDEFG HIJ”(不带引号并包括结尾空格)之后的那一刻,我发现range
等于 (11, 0)。但是,使用 SwiftKey,我得到的范围是 (10, 1)。此外,text
将等于使用普通键盘的结束空格,但将等于“J”加上使用 SwiftKey 的空格。如果我想正确检测某些短语,有什么想法为什么会发生这种情况以及如何标准化我的函数的行为? (我的目标是在每次按下空格之前立即检测这两个词)
编辑:这就是我检测空格前两个单词的方式。 我的问题是,当我使用非库存键盘时,range 给了我不同的值
NSUInteger charsBackUntilSecondSpace = 0;
NSUInteger numSpacesFound = 0;
for (int i = (int) range.location - 1; i>= 0; i--)
if([textView.text characterAtIndex:i] == ' ')
numSpacesFound++;
if (numSpacesFound == 2)
break;
else
charsBackUntilSecondSpace++;
UITextRange *selectedTextRange = textView.selectedTextRange;
NSUInteger location = [textView offsetFromPosition:textView.beginningOfDocument
toPosition:selectedTextRange.start];
NSRange inFrontOfCursorRange = NSMakeRange (location - charsBackUntilSecondSpace, charsBackUntilSecondSpace);
【问题讨论】:
【参考方案1】:我的目标是检测每个空格之前的两个单词 按
你可以像下面这样实现它:-
NSInteger lenPos=(range.length > 2) ? 2 : range.length;
NSString *txt=[textView.text substringWithRange:NSMakeRange(range.length-lenPos-1, lenPos)] ;
【讨论】:
嗨 Hussain - 在每次按下空格之前立即检测这两个词不是我的问题,事实上我使用自定义键盘时获得的范围值与我使用时不同普通键盘。以上是关于UITextView 委托行为与自定义 iOS 键盘 (SwiftKey) 不同的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 无法访问 UITableViewCell 类中的 UITextView 委托
如何使 didSelectRowAt IndexPath 与自定义委托一起使用