在我的应用程序中,我已经UITextInput
实现了为我的自定义文本视图处理多阶段键输入(日语、中文键盘)。我注意到在 iOS7 中,当您有一些标记的文本时,您点击键盘上方的建议之一来替换它,这setMarkedText:selectedRange
被调用了两次:一次用从上面面板中选择的字符串替换标记的文本键盘(如您所料),并且一旦将空字符串作为参数发送。在 iOS6 中,它只被调用一次。
我的问题是,这样做有什么原因吗?以及我应该如何调整我setMarkedText:selectedRange
的帐户(如下所列):
- (void)setMarkedText:(NSString *)markedText selectedRange:(NSRange)selectedRange
{
NSRange selectedNSRange = self.textView.selectedTextRange;
NSRange markedTextRange = self.textView.markedTextRange;
if (markedTextRange.location != NSNotFound)
{
if (!markedText)
markedText = @"";
[self.text replaceCharactersInRange:markedTextRange withString:markedText];
markedTextRange.length = markedText.length;
}
else if (selectedNSRange.length > 0)
{
[self.text replaceCharactersInRange:selectedNSRange withString:markedText];
markedTextRange.location = selectedNSRange.location;
markedTextRange.length = markedText.length;
}
else
{
[self.text insertString:markedText atIndex:selectedNSRange.location];
markedTextRange.location = selectedNSRange.location;
markedTextRange.length = markedText.length;
}
selectedNSRange = NSMakeRange(selectedRange.location + markedTextRange.location, selectedRange.length);
self.textView.contentText = self.text;
self.textView.markedTextRange = markedTextRange;
self.textView.selectedTextRange = selectedNSRange;
}
我的第一反应是if
围绕内容发表声明
if markedText != @""
但我不确定我是否会搞砸其他一些情况。有没有人对如何解释这种变化有任何建议?