Ios 限制用户可能输入的字符数无效

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] &

我必须限制用户在textview中输入的字符数。我把它限制在500个字符以内 下面是我的代码

- (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]之间的长度差执行
子字符串索引:
限制长度
?仍然存在相同的问题是否确实调用了此方法?