Cocoa touch 限制UITextView中的文本

Cocoa touch 限制UITextView中的文本,cocoa-touch,Cocoa Touch,我试图在cocoa touch中将文本输入限制在UITextView中。我真的想限制行的数量而不是字符的数量。到目前为止,我有这个来计算行数: - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if([text isEqualToString:@"\n"]) { rows++; }

我试图在cocoa touch中将文本输入限制在UITextView中。我真的想限制行的数量而不是字符的数量。到目前为止,我有这个来计算行数:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if([text isEqualToString:@"\n"]) {
        rows++;
    }
    NSLog(@"Rows: %i", rows);
    return YES;
}
但是,如果行是自动换行的,而不是用户按回车键,则此操作不起作用。是否有类似于检查“\n”的方法来检查文本是否被包装


谢谢。

不幸的是,使用NSString-stringWithFont:forWidth:lineBreakMode:不起作用-无论您选择哪种换行模式,文本的换行宽度都小于当前宽度,并且任何溢出行的高度都变为0。为了得到一个真实的数字,把线放在一个比你需要的高的框架中,然后你会得到一个比你实际高度更高的高度

注意我的软糖(宽度减去15)。这可能与我的观点有关(我有一个观点在另一个观点中),因此您可能不需要它

- (BOOL)textView:(UITextView *)aTextView shouldChangeTextInRange:(NSRange)aRange replacementText:(NSString*)aText
{
        NSString* newText = [aTextView.text stringByReplacingCharactersInRange:aRange withString:aText];

        // TODO - find out why the size of the string is smaller than the actual width, so that you get extra, wrapped characters unless you take something off
        CGSize tallerSize = CGSizeMake(aTextView.frame.size.width-15,aTextView.frame.size.height*2); // pretend there's more vertical space to get that extra line to check on
        CGSize newSize = [newText sizeWithFont:aTextView.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];

        if (newSize.height > aTextView.frame.size.height)
            {
            [myAppDelegate beep];
            return NO;
            }
        else
            return YES;
}

嗨,简-我知道这篇文章很老了,但这似乎是一个与我(这里)面临的问题非常相似的问题。这是您在这里描述的问题,还是您针对稍微不同的问题的解决方案?在iOS 7中,我发现UITextView的以下边距和填充值可能是您需要使用“tallerSize”的原因:
TextContainerSet
textContainer.lineFragmentPadding
。看见