如何在UITextView中获取已删除的文本?

时间:2015-09-01 05:33:42

标签: ios uitextview drag backspace

我希望在UITextView中删除已删除的文字。

因为我必须减少UITextView,当'\ n'删除时。

但是,shouldChangeTextInRange委托方法只返回最后一个字符串。

所以,例如

UITextView.text = @"ABCD\nEFG";

用户删除文字为@"D\nEFG"

然后,返回的文本不是'\ n'。所以我不知道是否应该减少行号。帮助我!

3 个答案:

答案 0 :(得分:0)

简单解决方案

- (void)textViewDidChange:(UITextView *)textView
{
    CGFloat fixedWidth = textView.frame.size.width;
    CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
    CGRect newFrame = textView.frame;
    newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
    textView.frame = newFrame;
}
  

使用以下代码,您可以更改UITextView的高度    取决于固定宽度(它适用于iOS 7和之前的版本):

- (CGFloat)textViewHeightForAttributedText:(NSAttributedString *)text andWidth:(CGFloat)width
{
    UITextView *textView = [[UITextView alloc] init];
    [textView setAttributedText:text];
    CGSize size = [textView sizeThatFits:CGSizeMake(width, FLT_MAX)];
    return size.height;
}

使用此功能,您将获取NSAttributedString和固定宽度以返回所需的高度。 如果您想根据具有特定字体的文本计算框架,则需要使用以下代码:

- (CGSize)text:(NSString *)text sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size
{
    if ([text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)])‌
    {
        CGRect frame = [text boundingRectWithSize:size
                                          options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                       attributes:@{NSFontAttributeName:font}
                                          context:nil];
        return frame.size;
    }
    else
    {
        return [text sizeWithFont:font constrainedToSize:size];
    }
}
  

这适用于iOS6和7:

CGSize textViewSize = [self.myTextView sizeThatFits:CGSizeMake(self.myTextView.frame.size.width, FLT_MAX)];
    self.myTextView.height = textViewSize.height;

答案 1 :(得分:0)

您知道将在shouldChangeTextInRange内更改的文字范围。

在您从YES返回shouldChangeTextInRange之前,您可以扫描该范围内的字符,看看是否有" \n"或" \r"那里的字符,然后你可以通过范围内找到的新行字符数减少行号。

答案 2 :(得分:0)

您可以使用以下代码获取UItextView的高度 -

CGSize textViewSize = [text sizeWithFont:[UIFont fontWithName:@"font_name" size:font_size] 
                   constrainedToSize:CGSizeMake(WIDHT_OF_VIEW, FLT_MAX) 
                   lineBreakMode:UILineBreakModeTailTruncation];

将font_name和font_size替换为您在UITextView中使用的实际值。 并将WIDHT_OF_VIEW替换为UITextView的宽度。

您可以使用以下代码获取UITextView的高度 -
textViewSize.height