在我的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的autocorrect属性,它肯定会被改变,但我输入时的行为不是。在需要的时候,因为自动更正菜单仍然显示当前文本下面的自动校正从来没有禁用:
编辑: 得到它的工作。最好的解决方案似乎是将您的响应者更改为隐藏的另一个文本视图,设置原始文本视图autocorrectType属性,然后将原始文本视图重新分配为第一响应者。这是一个小黑客,但它的作品,并不会导致键盘跳。此外,检查textViews的当前autocorrectionType属性以防止冗余的响应者分配也很重要。非常感谢Lyndsey帮助我找到答案。
(BOOL)的TextView:(UITextView的*)的TextView shouldChangeTextInRange:(NSRange)范围 replacementText:(的NSString *)文本 { 如果([文本isEqualToString:@ “@”] & & TextView的。 !autocorrectionType = UITextAutocorrectionTypeNo){
// text starts with "@" so we disable autocorrect [self.hiddenTextView becomeFirstResponder]; textView.autocorrectionType = UITextAutocorrectionTypeNo; [textView becomeFirstResponder];
}否则如果([文字isEqualToString:@”“]!& & textView.autocorrectionType = UIT extAutocorrectionTypeYes){
// empty space so we reenable autocorrect [self.hiddenTextView becomeFirstResponder]; textView.autocorrectionType = UITextAutocorrectionTypeYes; [textView becomeFirstResponder];
}
返回YES; }
这里的建议可能有效:http://stackoverflow.com/a/8656965/2274694 – 2014-12-04 23:34:15
实际上,我想我找到了更好的答案......一秒钟。 – 2014-12-04 23:35:39