有没有办法限制UITextView中的文本宽度

时间:2013-02-10 06:23:17

标签: objective-c cocoa-touch nsstring size uitextview

我有UITextView,我需要控制文本的开始和结束位置。

这是因为我使用气泡作为UITextView的背景图像,我需要在气泡图像中显示文字。

到目前为止,我已经能够控制文本的使用位置:

self.contentOffset = (CGPoint){.x = -10, .y = -10};

但我不知道如何控制文本结束的位置。目前,默认情况下它使用所有UITextView宽度。

2 个答案:

答案 0 :(得分:1)

随着文字延伸,气泡会高度增长吗?或者将泡沫限制在1行?无论哪种方式,我认为你应该使用不同的方法来处理这个问题。

在NSString实例上使用-sizeWithFont:constainedToSize:lineBreakMode:来确定文本的大小。如果大小大于您允许的值,则停止允许输入(如果这是您的目标)或增加气泡的高度并允许文本在下一行继续。

您通常会在文本输入时执行这些重新计算,这意味着您将根据上述建议实现UITextViewDelegate方法-textView:shouldChangeTextInRange:replacementText:

- 或 -

只需限制textView的大小并设置lineBreakMode& numberOfLines也可能足以满足您的需要。

答案 1 :(得分:0)

  

定义#define TEXT_LENGTH 25 //无论你的限制是什么

只要用户键入新字符或删除现有字符,UITextView就会调用此方法。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    NSUInteger newLength = (textView.text.length - range.length) + text.length;
    if(newLength <= TEXT_LENGTH)
    {
        return YES;
    } else {
        NSUInteger mySpace = TEXT_LENGTH - (textView.text.length - range.length);
        textView.text = [[[textView.text substringToIndex:range.location] 
                                            stringByAppendingString:[text substringToIndex: mySpace]]
                                         stringByAppendingString:[textView.text substringFromIndex:(range.location + range.length)]];
        return NO;
    }
}

在方法中使用replacementText而非replacementString,因此请注意replacementString和replacementText之间的不同。