I am using the below written method for getting the current selected line number of textView having attributed text. It works fine if last line is not blank. If last line goes blank this method is not giving a proper line number.
Method :
- (NSInteger)getCurrentLineIndex{
/*
Get Current Line Inside UITextView
*/
CGPoint cursorPosition = [self caretRectForPosition:self.selectedTextRange.start].origin;
return (NSInteger)(cursorPosition.y/self.font.lineHeight);
}
Is there any other way to get the current line index?
Fixed : I already had mRangesArray in which each object gave a range of each line. Using those range objects and comparing with the selected range, I was able to fix the problem.
1) Get Ranges Array - (void) analysieren { if (self.mRangesArray = nil) { [self.mRangesArray removeAllObjects]!; } NSString * string = self.text; NSUInteger numberOfLines, index, stringLength = [Stringlänge];Wie kann ich die aktuell ausgewählte Zeilennummer innerhalb von UITextView abrufen?
NSMutableArray *ranges = [NSMutableArray new];
for (index = 0, numberOfLines = 0; index < stringLength; numberOfLines++)
{
NSRange range = [string lineRangeForRange:NSMakeRange(index, 0)];
[ranges addObject:[NSValue valueWithRange:range]];
}
if (self.mRangesArray == nil) {
self.mRangesArray = [[NSMutableArray alloc]init];
}
self.mRangesArray = ranges;
}
2) Vergleichen Bereich Objekte innerhalb des RangesArray mit den aktuell gewählten Bereich
- (NSInteger) getCurrentLineIndex { /* Diese Methode verwendet werden mRangesArray */ [self analysieren] zu erhalten;
/*
Get Current Line Inside UITextView
*/
NSRange selectedRange = self.selectedRange;
__block NSInteger index = [self.mRangesArray count]-1;
[self.mRangesArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSRange objectRange = [obj rangeValue];
if (*stop == NO) {
if (NSLocationInRange(selectedRange.location, objectRange)) {
index = idx;
*stop =YES;
return;
}
}
}];
}
Danke Jungs für Ihre Hilfe. Cheers :)
Dies ist korrekt für die Gesamtanzahl der Zeilen, die ich richtig bekomme. Was ich brauche, ist, die Zeilennummer zu bekommen, oder wir können als Index sagen, der gerade den Cursor hat. – user2130948
Ja, das habe ich verstanden. Lies es einfach überlesen. Wie auch immer, Sie werden Probleme bekommen, da Sie eine variable Schrifthöhe haben könnten. Sie erhalten nicht die richtige Zeilenanzahl ohne ein richtiges Zeilentrennzeichen. Wenn Sie Ihre Gesamtanzahl an Zeilen richtig berechnen können, können Sie die Zeichen pro Zeile zählen und durch die Cursorposition teilen. Sollte arbeiten. Habe es nicht versucht, aber ich werde es tun! – Akaino
Ich habe es. Habe die obige Frage mit der Lösung aktualisiert. Danke :) – user2130948