Ios 限制用户可能输入的字符数无效
我必须限制用户在textview中输入的字符数。我把它限制在500个字符以内 下面是我的代码Ios 限制用户可能输入的字符数无效,ios,objective-c,uitextview,Ios,Objective C,Uitextview,我必须限制用户在textview中输入的字符数。我把它限制在500个字符以内 下面是我的代码 - (void)textViewDidChange:(UITextView *)textView{ NSInteger restrictedLength=500; NSString *temp=textView.text; NSLog(@"hekk %ld",[[textView text]length]); if([[textView text] length] &
- (void)textViewDidChange:(UITextView *)textView{
NSInteger restrictedLength=500;
NSString *temp=textView.text;
NSLog(@"hekk %ld",[[textView text]length]);
if([[textView text] length] > restrictedLength){
textView.text=[temp substringToIndex:[temp length]-1];
}
}
问题是,如果用户使用键盘编辑textview,则用户可能无法键入超过500个字符。但是如果用户复制粘贴文本,用户可以输入超过500个字符。我可以如何解决此问题?使用委托方法:
应更改范围中的字符
这里有一个例子:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSInteger restrictedLength=500;
NSString *temp=textView.text;
NSLog(@"hekk %ld",[[textView text]length]);
if(([[textView text] length] > restrictedLength)&&(range.length == 0)){
return NO;
}
return YES;
}
对于这种情况,最好使用shouldChangeTextInRange委托方法
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
let textLenghtLimit = 100
let isChareactersLimitReached = (textView.text.characters.count - range.length + text.characters.count > textLenghtLimit)
return !isChareactersLimitReached
}
您可以使用
UITextView
类的shouldChangeCharactersInRange
委托方法
只要UITextView
中的文本发生更改,就会调用shouldChangeCharactersRange
因此,您可以通过以下方法验证您的需求:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
NSInteger restrictedLength=500;
NSString *temp=textView.text;
NSLog(@"hekk %ld",[[textView text]length]);
if([[textView text] length] > restrictedLength){
textView.text=[temp substringToIndex:restrictedLength];
return NO;
}
return YES;
}
试试这个
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
int maxCharacters = 500;
NSString *newString = [textView.text stringByReplacingCharactersInRange:range withString:text];
if(newString.length > maxCharacters){
textView.text = [newString substringToIndex:maxCharacters];
return NO;
}
return YES;
}
我已经在我的应用程序中使用了这个代码,它工作得很好
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if([text isEqualToString:@"\n"])
[textView resignFirstResponder];
else
{
if (textView.text.length + (text.length - range.length) == 400) {
[appDel displayAlert:@"Message limit is 400 character."];
}
return textView.text.length + (text.length - range.length) <= 400;
}
return YES;
}
-(BOOL)textView:(UITextView*)textView应更改textinrange:(nsrrange)范围替换text:(NSString*)文本
{
如果([文本IsequalString:@“\n”])
[textView辞职第一响应者];
其他的
{
如果(text.view.text.length+(text.length-range.length)==400){
[appDel displayAlert:@“消息限制为400个字符。”];
}
return textView.text.length+(text.length-range.length)以下代码将文本输入限制为100个字符
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if(textField.text.length < 100)
{
return true;
}
return false;
}
-(BOOL)textField:(UITextField*)textField应更改字符范围:(NSRange)范围替换字符串:(NSString*)字符串
{
如果(textField.text.length<100)
{
返回true;
}
返回false;
}
简单答案
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if(range.length + range.location > textView.text.length)
{
return NO;
}
NSUInteger newLength = [textView.text length] + [text length] - range.length;
return newLength <= 500;
}
-(BOOL)textView:(UITextView*)textView应更改textinrange:(nsrrange)范围替换text:(NSString*)文本
{
if(range.length+range.location>textView.text.length)
{
返回否;
}
NSUInteger newLength=[textView.text length]+[text length]-range.length;
返回newLength您只使用“-1”返回子字符串索引:
。但实际上,如果有多个新字符(作为复制/粘贴),这是一个问题。那么为什么不使用[[textView text]length]之间的长度差执行子字符串索引:
和限制长度
?仍然存在相同的问题是否确实调用了此方法?