我有一个可编辑的uitextview,但有些字符我不想被输入。
我该怎么做?
答案 0 :(得分:4)
您可以通过将委托分配给UITextView并在委托中实现以下方法来完成此操作:
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
在正文中只需编写一些扫描输入文本的代码,看看是否找到了要过滤的字符,如果看到它们返回NO,否则返回YES。
答案 1 :(得分:0)
不幸的是,这并不是那么简单,因为textView:shouldChangeTextInRange: replacementText:
并非必须使用单字符字符串调用。它用于键盘输入,但在粘贴或使用语音识别输入文本时不是。
那么如果用户粘贴(或指示)包含禁用字符的字符串,您想要做什么?您可能希望让所有有效文本都通过,并且只删除(或替换)不需要的字符。
错误的想法是修复textViewDidChange:
委托例程中的文本。虽然这似乎有效,但它会以某种方式阻止语音输入在UITextView
中工作。
正确的想法是使用完全过滤来实现textView:shouldChangeTextInRange: replacementText:
。以下是过滤掉换行符的示例实现:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if([text isEqualToString:@"\n"]) {
[textView resignFirstResponder]; // dismiss keyboard
return NO;
}
text = [text stringByReplacingOccurrencesOfString:@"\n" withString:@" "]; // replace by spaces
NSString *fullText = [textView.text stringByReplacingCharactersInRange:range withString:text];
textView.text = fullText;
return NO;
}
请注意,当用户敲击回车键时,它会关闭键盘。但不太完美:当用户粘贴单个换行符时,它也会关闭键盘。这可能是个问题,但这种情况很少发生。