gpt4 book ai didi

ios - 额外调用 setMarkedText :selectedRange in iOS7?

转载 作者:行者123 更新时间:2023-11-29 12:40:56 24 4
gpt4 key购买 nike

在我的应用程序中,我实现了 UITextInput,因此我可以为我的自定义 TextView 处理多级键输入(日语、中文键盘)。我注意到在 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 != @""

但我不确定我是否会搞砸其他一些情况。有人对如何解释这一变化有任何建议吗??

最佳答案

DTS 的人推荐了这个解决方案:

- (void)setMarkedText:(NSString *)markedText selectedRange:(NSRange)selectedRange 
{
...

if (markedText == nil || markedText.length == 0 )
{
[self unmarkText];
}
}

它似乎工作正常。

关于ios - 额外调用 setMarkedText :selectedRange in iOS7?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24955020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com