Дополнительный вызов setMarkedText:selectedRange в iOS7?
В моем приложении у меня есть 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 != @""
но я не уверен, что я испортил бы некоторые другие случаи. У кого-нибудь есть какие-либо предложения о том, как учесть это изменение??
1 ответ
Парень из DTS рекомендовал это решение:
- (void)setMarkedText:(NSString *)markedText selectedRange:(NSRange)selectedRange
{
...
if (markedText == nil || markedText.length == 0 )
{
[self unmarkText];
}
}
И, кажется, работает нормально.