在我的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