UITextView获取当前行

有没有办法(疯狂的黑客欢迎)将当前行作为UITextView的字符串? 这将包括自动换行等。例如,在这种情况下:

在此处输入图像描述

该方法将返回“堆栈溢出。是不是很好?我”因为这是基于游标的当前行。

它也可以根据光标的位置返回“这是我为之做的测试”或“这么做”。 我尝试使用UITextView方法和UITextInput协议。

编辑:

这是我试图使用的代码。 我需要找到字符串的原因是为了获得它的长度,所以这就是为什么你会看到基于UI的代码。

NSRange location = self.textView.selectedRange; NSString *searchString = [self.textView.text substringWithRange:NSMakeRange(0, location)]; CGSize currentStringDimensions = [searchString sizeWithFont:self.textView.font constrainedToSize:CGSizeMake(self.textView.frame.size.width, self.textView.frame.size.height) lineBreakMode:NSLineBreakByWordWrapping]; float numberOfRows = (currentStringDimensions.width/(self.textView.frame.size.width)); float left = (float)(numberOfRows - (int)numberOfRows) * (self.textView.frame.size.width); 

但是,这不起作用。 我认为它可能与包装的单词或不同大小的字符有关,但左边的值不一致或在第一行后关闭。

以下代码解决方案似乎正在运行。 此代码中的“self”是指UITextView的一个实例。

 - (NSString *) getLineString:(NSRange)range { NSLayoutManager *manager = self.layoutManager; // Convert it to a glyph range NSRange matchingGlyphRange = [manager glyphRangeForCharacterRange:range actualCharacterRange:NULL]; // line fragment rect at location range CGRect rect = [manager lineFragmentRectForGlyphAtIndex:matchingGlyphRange.location effectiveRange:nil]; // obtain the line range for the line fragment rect NSRange lineRange = [manager glyphRangeForBoundingRect:rect inTextContainer:self.textContainer]; // extract the string out from lineRange return [self.text substringWithRange:lineRange]; } // ... later NSLog(@"line %@", [self getLineString:self.selectedRange]); 

我最终使用UITextInput的caretRect方法从左边获取偏移量。 工作完美无瑕。

这对我有用(自我= UITextView)

 func getLineString() -> String { return (self.text! as NSString).substringWithRange((self.text! as NSString).lineRangeForRange(self.selectedRange)) }