1

在我的应用程序中,我已经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 != @""

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

4

1 回答 1

1

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

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

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

它似乎工作正常。

于 2014-08-14T03:26:27.827 回答