2016-06-27 10 views
4

ユーザーがテキストビューに入力できる文字数を制限する必要があります。イムは、以下の500文字 にそれを制限することの問題は、ユーザがキーボードを使用しての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]; 
    } 
} 

、私のコードです。しかし、ユーザーのコピーがテキストを貼り付けると、ユーザーは500文字以上を入力することができます。私はこれを整理することができますか?

+1

のためのテキスト入力を制限している細かい作業を、このコードを使用しています'substringToIndex:'は '-1 'だけで行います。しかし実際には、複数の新しい文字が(コピー/貼り付けとして)存在する場合、それは問題です。だから、 '[[textView text] length]と' restrictedLength'の長さの差を使って 'substringToIndex:'をやってみませんか? – Larme

答えて

2

は、私は私のアプリで

-(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; 
} 
3

デリゲートメソッドを使用する:ここで

shouldChangeCharactersInRange

例:

- (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; 
    } 
+0

まだ同じ問題が存在する – Learner

+0

このメソッドが呼び出されていますか? – oremag14jf

2

それは、このような場合のために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 
    } 
1

あなたはUITextViewクラスのshouldChangeCharactersInRangeデリゲートメソッドを使用することができます。

UITextViewのテキストが変更されるたびに、shouldChangeCharactersInRangeが呼び出されます。

次のように、あなたはこの方法では、あなたの要件を検証することができます。

- (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; 
} 
2

はこれを試してみてください。

- (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; 
} 
1

次のコードは、100文字

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
    { 
     if(textField.text.length < 100) 
     { 
       return true; 
     } 
     return false; 

    } 
1

単純な答え

-(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; 
} 
関連する問題