iPhone:限制UITextView中的文本输入

时间:2011-04-09 13:14:05

标签: iphone objective-c uitextview

我试图限制用户在UITextView中可以拥有的LINES数量。让我们考虑我只想允许4行(即在下面的示例中,在给定的宽度为200的UITextView中,使用给定字体的高度不能高于84像素。)

我对此进行了编码以实现限制,并且工作正常:

    - (BOOL)textView:(UITextView *)aTextView shouldChangeTextInRange:(NSRange)aRange replacementText:(NSString *)aText {

    NSString* newText = [aTextView.text stringByReplacingCharactersInRange:aRange withString:aText];


    CGSize strSize = [newText sizeWithFont:textView.font constrainedToSize:CGSizeMake(200, 10000) lineBreakMode:UILineBreakModeWordWrap];

if (strSize.height > 100)

    {

        return NO; // can't enter more text
    }
    else
        return YES; // let the textView know that it should handle the inserted text
    }

到目前为止一切顺利。当我试图偷偷摸摸并在每次返回之前输入尽可能多的'x'时,问题就出现了。在这种情况下,我可以额外获得4行...我显然不想允许。我假设这与lineBreakMode有关?有没有改变这个的情况?我在文档中找不到太多内容(但话说回来,我通常很难理解它们)。

我附上了几个屏幕截图来说明问题。对任何建议我都很感激。非常感谢!


Normal behaviour - stops after 4 lines Deviant behaviour - too many lines through additional x-es

2 个答案:

答案 0 :(得分:2)

(我希望我能正确理解你的问题......)

仔细观察,UITextView有一个余量。如果您不小心使用sizeWithFont:,它会在特殊情况下返回意外结果(因为您不尊重文本视图的边距)。

您应该1)调整sizeWithFont:中使用的宽度以尊重文本视图的边距,或2)使用辅助UITextView对象来准确计算内容大小。

答案 1 :(得分:1)

在我看来,UITextView中的自动换行是 ,你可以做很多改变它(请告诉我,我错了)。如果你只想要4行,那么在UIScrollView中可能有4个UITextField(将返回键发送到Next)。或者,当每行的渲染矩形的长度超过一行的高度时,减少ContentSize。

另见limiting text in a uitextview