В моем text view
я бы хотел, чтобы автозамена была отключена при вводе слов, начинающихся с "@". Причина в том, что у меня есть всплывающее меню tableview, предлагающее имена пользователей. Если выбрано имя пользователя, текущий текст заменяется на hyperlink
. Эта функция очень похожа на Facebook
.
Все отлично работает, если в моем текстовом представлении отключена автокоррекция. Однако, если я включу автозамену в текстовом представлении, временами он будет работать неправильно из-за предложенного текста. Вот мой код, в котором я пытаюсь изменить свойство автозамены текстового представления в протоколе делегата:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
replacementText:(NSString *)text
{
if ([text isEqualToString:@"@"]) {
// text starts with "@" so we disable autocorrect
textView.autocorrectionType = UITextAutocorrectionTypeNo;
} else if ([text isEqualToString:@" "]) {
// empty space so we reenable autocorrect
textView.autocorrectionType = UITextAutocorrectionTypeYes;
}
return YES;
}
По какой-то причине он не работает, хотя свойство автозамены изменяется правильно. Я проверил свойство автозамены textview в отладчике, и оно определенно меняется, а вот поведение во время набора текста - нет. Автокоррекция никогда не отключается, когда это необходимо, потому что меню автокоррекции по-прежнему отображается под текущим текстом:
Изменить: все заработало. Лучшим решением, по-видимому, является изменение вашего респондента на другое скрытое текстовое представление, установка свойства autocorrectType исходных текстовых представлений, а затем переназначение исходного текстового представления в качестве первого респондента. Это немного взломано, но работает и не заставляет клавиатуру прыгать. Также важно проверить текущее свойство autocorrectionType textViews, чтобы предотвратить повторные назначения респондентов. Большое спасибо Линдси за помощь в поиске ответа.
(BOOL) textView: (UITextView *) textView shouldChangeTextInRange: (NSRange) range replaceText: (NSString *) text {if ([text isEqualToString: @ "@"] && textView.autocorrectionType! = UITextAutocorrectionTypeNo) {
// text starts with "@" so we disable autocorrect [self.hiddenTextView becomeFirstResponder]; textView.autocorrectionType = UITextAutocorrectionTypeNo; [textView becomeFirstResponder];
} else if ([text isEqualToString: @ ""] && textView.autocorrectionType! = UITextAutocorrectionTypeYes) {
// empty space so we reenable autocorrect [self.hiddenTextView becomeFirstResponder]; textView.autocorrectionType = UITextAutocorrectionTypeYes; [textView becomeFirstResponder];
}
вернуть ДА; }