限制uitextview中的字符数

我正在给文本视图来鸣叫一些string。

我正在应用以下方法将字符数限制为140。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ if([text isEqualToString:@"\b"]){ DLog(@"Ohoooo"); return YES; }else if([[textView text] length] > 140){ return NO; } return YES; } 

代码工作很好,除了退格不起作用的第一个条件。 假设我已经达到了140个字符的限制,所以这个方法会给我错误的,用户不能插入更多的字符,但是之后当我尝试删除一些字符时,文本视图的行为就像禁用了。

所以问题如何从textview.text删除字符或重新启用文本视图。

你应该寻找一个空string,而苹果引用说

如果用户按下Delete键,则范围的长度为1,空string对象将replace该单个字符。

我觉得你实际上想做的检查是类似于[[textView text] length] - range.length + text.length > 140 ,来说明剪切/粘贴操作。

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { return textView.text.length + (text.length - range.length) <= 140; } 

这说明了用户剪切文本或者删除比单个字符更长的string(例如,如果他们select然后回退),或者突出显示范围并粘贴比它短或者更长的string。

Swift 2.0版本

  func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { return textView.text.characters.count + (text.characters.count - range.length) <= 140 } 

但是你也可以使用下面的工作代码..

 - (void)textViewDidChange:(UITextView *)textView{ NSInteger restrictedLength=140; NSString *temp=textView.text; if([[textView text] length] > restrictedLength){ textView.text=[temp substringToIndex:[temp length]-1]; } } 

你这个

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { int limit = 139; return !([textField.text length]>limit && [string length] > range.length); } 

这将只input140个字符,你可以删除它们,如果需要的话

迅速:

 // MARK: UITextViewDelegate let COMMENTS_LIMIT = 255 func textView(textView: UITextView, shouldChangeTextInRange range:NSRange, replacementText text:String ) -> Bool { return count(comments.text) + (count(text) - range.length) <= COMMENTS_LIMIT; } 

上面给出的一些答案的问题是,例如我有一个文本字段,我必须设置15个字符input的限制,然后在input第15个字符后停止。 但是他们不允许删除。 这是删除button也不起作用。 因为我面临同样的问题。 拿出解决scheme,给出下面。 适合我的作品

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if(textField.tag==6) { if ([textField.text length]<=30) { return YES; } else if([@"" isEqualToString:string]) { textField.text=[textField.text substringToIndex:30 ]; } return NO; } else { return YES; } } 

我有一个文本字段,其标签我已经设置“6”,我已经限制最大字符数限制= 30; 在任何情况下工作正常

虽然我需要一个if-else条件,所以这为我工作:

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { BOOL status = textView.text.length + (text.length - range.length) <= 15; if (status) { [self.btnShare setEnabled:YES]; [self.btnShare setAlpha:1]; } else { [self.btnShare setEnabled:NO]; [self.btnShare setAlpha:0.25]; } return status; } 

原本button被设置为禁用。 但是,如果你想让用户不能发布一个空的testing,只需在button点击一个条件:

 - (void)btnShare_click:(id)sender { NSString *txt = [self.txtShare.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; if ([txt length] == 0) { [self.btnShare setEnabled:NO]; [self.btnShare setAlpha:0.25f]; [[[UIAlertView alloc]initWithTitle:nil message:@"Please enter some text to share." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show]; return; } . . . . . . // rest of your code } 

@Tim Gostony的Swift版本:

 // restrict the input for textview to 500 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { return count(textView.text) + (count(text) - range.length) <= 500; } 

试试这个:

 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { print("chars \(textView.text.characters.count) \( text)") if(textView.text.characters.count > 20 && range.length == 0) { print("Please summarize in 20 characters or less") return false; } return true; } 

textView:shouldChangeTextInRange:replacementText:写下面的代码textView:shouldChangeTextInRange:replacementText: method:

 if ([textView.text length]>=3 && ![text isEqualToString:@""]) { return NO; } return YES; 
 Use the following code... - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if(text.length == 0) { return YES; } else if(self.txtViewComments.text.length > 255) { return NO; } else { return YES; } } 

在这里,我们去找最合适的。 显示剩余字符数:剩余“n”个字符。

 var charCount = 0; let maxLength = 150 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { if text == "" // Checking backspace { if textView.text.characters.count == 0 { charCount = 0 characterCount.text = String(format: "%i Characters Left", maxLength - charCount) return false } charCount = (textView.text.characters.count - 1) characterCount.text = String(format: "%i Characters Left", maxLength - charCount) return true } else { charCount = (textView.text.characters.count + 1) characterCount.text = String(format: "%i Characters Left", maxLength - charCount) if charCount >= maxLength + 1 { charCount = maxLength characterCount.text = String(format: "%i Characters Left", maxLength - charCount) return false; } } return true }