Как читать Количество строк в UITextView - PullRequest
24 голосов
/ 27 августа 2010

Я использую UITextView В моем View, у меня есть требование подсчитать количество строк, содержащихся в textview, использую следующую функцию для чтения '\n'.Однако это работает только тогда, когда клавиша возврата нажата с клавиатуры, но в случае обёртки строки (когда я набираю непрерывные символы, я не получаю символ новой строки).Как мне прочитать новый символ, когда строка изменяется без нажатия клавиши возврата?У кого-нибудь есть идея, как ... пожалуйста, поделитесь этим .. Я следую по этой ссылке Ссылка

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range 
 replacementText:(NSString *)text
{
    // Any new character added is passed in as the "text" parameter
    if ([text isEqualToString:@"\n"]) {
        // Be sure to test for equality using the "isEqualToString" message
        [textView resignFirstResponder];

        // Return NO so that the final '\n' character doesn't get added
        return NO;
    }
    // For any other character return YES so that the text gets added to the view
    return YES;
}

Ответы [ 4 ]

27 голосов
/ 06 июня 2014

В iOS 7 оно должно быть точно:

float rows = (textView.contentSize.height - textView.textContainerInset.top - textView.textContainerInset.bottom) / textView.font.lineHeight;
26 голосов
/ 27 августа 2010

Вы можете посмотреть на свойство contentSize вашего UITextView, чтобы получить высоту текста в пикселях, и разделить на расстояние между строками шрифта UITextView, чтобы получить количество текстовых строк в общем UIScrollView (на экране включения и выключения). ), включая завернутый и разорванный текст.

4 голосов
/ 28 марта 2018
extension NSLayoutManager {
    var numberOfLines: Int {
        guard let textStorage = textStorage else { return 0 }

        var count = 0
        enumerateLineFragments(forGlyphRange: NSMakeRange(0, numberOfGlyphs)) { _, _, _, _, _ in
            count += 1
        }
        return count
    }
}

Получить количество строк в textView:

let numberOfLines = textView.layoutManager.numberOfLines
0 голосов
/ 31 октября 2014

Только для справки ...

Другим способом получения количества строк, а также содержимого, является разбиение строк в массиве с использованием того же метода, который был упомянут в редактировании ответа BoltClock.

NSArray *rows = [textView.text componentsSeparatedByString:@"\n"];

Вы можете выполнять итерацию по массиву, чтобы получить содержимое каждой строки, и вы можете использовать [число строк], чтобы получить точное количество строк.

Следует иметь в виду, что пустые строки будут также учитываться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...