如何在UITextView中不允许输入'space'?

时间:2014-08-16 20:16:23

标签: ios objective-c text uitextview

我有一个UITextView,我不希望用户在输入的文本中有任何空格。我怎么办才不允许他使用空格键? 谢谢!

3 个答案:

答案 0 :(得分:12)

你需要

  1. 将视图控制器指定为文本视图的delegate(可以通过编程方式执行此操作,也可以在Interface Builder中指定委托);和

  2. 您的UITextViewDelegate方法shouldChangeTextInRange需要检查要插入的字符串是否包含空格:

    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
        if ([text rangeOfCharacterFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].location != NSNotFound) {
            return NO;
        }
        return YES;
    }
    

    或者,在Swift中:

    extension ViewController: UITextViewDelegate {
        func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
            return text.rangeOfCharacter(from: .whitespacesAndNewlines) == nil
        }
    }
    

    注意,这不是检查replacementText是否等于空格,因为这是一个不足的检查。相反,这是检查替换文本中是否有空格 where 。这是一个重要的区别,因为可以将文本粘贴到文本视图中,该文本可能不等于空格,但可能在粘贴值的某处包含空格。

答案 1 :(得分:1)

我认为正确的方法是首先阻止编辑:

在ViewController.h文件中,使其实现UITextViewDelegate协议:

@interface ViewController : UIViewController <UITextViewDelegate>

在ViewController.m的ViewController的viewDidLoad方法中,将textField的委托设置为视图控制器:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    self.myTextView.delegate = self;
}

最后,我们需要捕捉发生的变化并删除空格。我们可以在textViewDidChange:方法中执行此操作。当新字符串中有空格时,在shouldChangeTextInRange:方法中返回NO将阻止用户粘贴其中包含空格的文本(可能不是您想要的)。如果我们只是删除空格,用户就无法从键盘输入新的空格,但如果他们要在剪贴板中粘贴“hello world”之类的东西,他们会在TextView中获得“helloworld”:

- (void)textViewDidChange:(UITextView *)textView
{
    // eliminates spaces, including those introduced by autocorrect
    if ([textView.text rangeOfCharacterFromSet:[NSCharacterSet whitespaceCharacterSet]].location != NSNotFound) {
        textView.text = [textView.text stringByReplacingOccurrencesOfString:@" " withString:@""];
    }
}

答案 2 :(得分:-1)

How does the methods "shouldChangeTextInRange" and "stringByReplacingCharactersInRange" work?

只是不允许空间又名@&#34; &#34;使用链接中看到的方法(

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
 if( [string isEqualToString:@" "] )
    return NO;
 else 
    return YES;
}

请记住设置文本视图的委托