我有 UITextView ,我需要控制文本的开始和结束位置。
这是因为我使用气泡作为 UITextView 的背景图像,并且我需要在气泡图像中显示文本。
到目前为止,我已经能够控制文本开始使用的位置:
self.contentOffset = (CGPoint){.x = -10, .y = -10};
但我不知道如何控制文本结束的位置。目前,默认情况下它使用所有 UITextView 宽度。
我有 UITextView ,我需要控制文本的开始和结束位置。
这是因为我使用气泡作为 UITextView 的背景图像,并且我需要在气泡图像中显示文本。
到目前为止,我已经能够控制文本开始使用的位置:
self.contentOffset = (CGPoint){.x = -10, .y = -10};
但我不知道如何控制文本结束的位置。目前,默认情况下它使用所有 UITextView 宽度。
随着文本的拉伸,气泡会变高吗?还是将气泡限制在 1 行?无论哪种方式,我认为你应该使用不同的方法来处理这个问题。
在 NSString 实例上使用-sizeWithFont:constainedToSize:lineBreakMode:
来确定文本的大小。如果大小大于您允许的值,请停止允许输入(如果这是您的目标)或增加气泡的高度并允许文本在下一行继续。
您通常会在文本输入时执行这些重新计算,这意味着您将-textView:shouldChangeTextInRange:replacementText:
根据上述建议实现 UITextViewDelegate 方法。
- 或者 -
仅限制 textView 的大小并设置 lineBreakMode 和 numberOfLines 也可能足以满足您的目的。
定义 #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
not replacementString
in 方法,所以要注意replacementString 和replacementText 之间的区别。