如何在UITextview中禁止某些字符

时间:2009-02-10 15:30:29

标签: iphone cocoa-touch

我有一个可编辑的uitextview,但有些字符我不想被输入。

我该怎么做?

2 个答案:

答案 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;
}

请注意,当用户敲击回车键时,它会关闭键盘。但不太完美:当用户粘贴单个换行符时,它也会关闭键盘。这可能是个问题,但这种情况很少发生。