我有一个UITextView,我不希望用户在输入的文本中有任何空格。我怎么办才不允许他使用空格键? 谢谢!
答案 0 :(得分:12)
你需要
将视图控制器指定为文本视图的delegate
(可以通过编程方式执行此操作,也可以在Interface Builder中指定委托);和
您的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;
}
请记住设置文本视图的委托