4

この質問が寄せられていることは承知していますが、有効な回答が見つかりません。以前のソリューションの組み合わせを使用して、次のコードを思いつきました。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)string
{
    int numLines = notesTextView.contentSize.height / notesTextView.font.lineHeight;
        if (numLines <= 8)
        {
            return true;
        }
        return false;
}

追加テキストの前に行数がカウントされるため、これは機能しません。したがって、必要な行を超えてまだ行が取得され、それ以上編集できないため、その行に閉じ込められます。

「\n」エントリを検出するソリューションも試しましたが、リターンを押さなくても自然に新しい行に到達できるため、これも機能しません。

4

3 に答える 3

5

これはどう:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)string
{
    NSString *temp = [textView.text stringByReplacingCharactersInRange:range withString:string]
    CGSize size = [temp sizeWithFont:textView.font constrainedToSize:CGSizeMake(textView.frame.size.width,999) lineBreakMode:UILineBreakModeWordWrap];
    int numLines = size.height / textView.font.lineHeight;
    if (numLines <= 8)
    {
        return true;
    }
    return false;
}

新しいテキストを解析し、textView の情報を使用して新しいテキストのサイズを確認します。

于 2013-06-18T15:04:04.773 に答える
0

これが私が過去に行った方法です。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{

// limit the number of lines in textview
NSString* newText = [mytextView.text stringByReplacingCharactersInRange:range withString:text];

// pretend there's more vertical space to get that extra line to check on
CGSize tallerSize = CGSizeMake(mytextView.frame.size.width-15, mytextView.frame.size.height*2); 

CGSize newSize = [newText sizeWithFont:mytextView.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];

if (newSize.height > mytextView.frame.size.height)
{
    NSLog(@"two lines are full");
    return NO;
}


// dismiss keyboard and send comment
if([text isEqualToString:@"\n"]) {
    [mytextView resignFirstResponder];

    return NO;
}

return YES;
}

幸運を。

編集:

次の方法を試して、これがうまくいくかどうかを確認してください。行数を任意の数に変更するだけです。

 (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if([text isEqualToString:@"n"]) {
        rows++;
    if(rows >= maxNumberOfLines){
        //Exit textview
         return NO;
        }
   }
  return YES;

これがうまくいくかどうか教えてください。

于 2013-06-18T15:05:07.297 に答える