【问题标题】:Check if text in UITextView went to new line due to word wrap检查 UITextView 中的文本是否由于自动换行而换行
【发布时间】:2015-03-17 22:50:23
【问题描述】:

如何检查UITextView 中的文本是否由于自动换行而进入下一行?

我目前有代码来检查用户是否输入新行(从键盘)。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
{
    if ( [text isEqualToString:@"\n"] ) {
        ...
    }
    return YES;
}

【问题讨论】:

    标签: objective-c uitextview word-wrap


    【解决方案1】:

    您可以使用 UITextView 的 contentSize.height 属性来确定您的文本视图有多“高”。然后,您可以除以 lineHeight 来计算行数。 @nacho4d 提供了这行漂亮的代码:

    int numLines = textView.contentSize.height/textView.font.lineHeight;
    

    有关更多信息,请参阅此问题: How to read number of lines in uitextview

    编辑: 所以你可以在 -textViewDidChange: 里面做这样的事情来检查换行。

    int numLines = textView.contentSize.height / textView.font.lineHeight; 
    if (numLines != numLinesInTextView){
        numLinesInTextView = numLines;//numLinesInTextView is an instance variable
        //then do whatever you need to do on line change
    }
    

    【讨论】:

    • 只有在文本开始时才有效。在我的情况下,文本不会在开始时出现,用户将输入文本。
    • 您可以使用委托方法 -textViewDidChange:在用户对文本进行更改后调用此方法(在您使用的委托方法返回后)。
    • 但是textView的高度不会改变?
    • textView.frame.size.height 不会改变,但 textView.contentSize.height 会随着用户输入文本而改变。如果您将我的答案中的代码行放在 -textViewDidChange 委托方法中并使用 NSLog(@"numLines is %d", numLines);当您输入文本时,您会看到行数发生变化。
    • if 语句是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 2012-03-04
    相关资源
    最近更新 更多