限制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 }