Yes I got it :) :)
in Objective C
- (void)viewDidLoad {
[super viewDidLoad];
[self getVisibleText];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
[self getVisibleText];
}
- (void)getVisibleText {
NSRange range = [self visibleRangeOfTextView:self.textview];
NSString *visibleText = [self.textview.text substringWithRange:range];
NSLog(@"visibleText == %@",visibleText);
}
- (NSRange)visibleRangeOfTextView:(UITextView *)textView {
CGRect bounds = textView.bounds;
UITextPosition *start = [textView characterRangeAtPoint:bounds.origin].start;
UITextPosition *end = [textView characterRangeAtPoint:CGPointMake(CGRectGetMaxX(bounds), CGRectGetMaxY(bounds))].end;
return NSMakeRange([textView offsetFromPosition:textView.beginningOfDocument toPosition:start],
[textView offsetFromPosition:start toPosition:end]);
}
in Swift
override func viewDidLoad() {
super.viewDidLoad()
self.getVisibleText()
// Do any additional setup after loading the view, typically from a nib.
}
func scrollViewDidScroll(scrollView: UIScrollView) {
self.getVisibleText()
}
func getVisibleText() {
let range: NSRange = self.visibleRangeOfTextView(self.textview!)
let myNSString = self.textview!.text! as NSString
let visibleText: String = myNSString.substringWithRange(range)
NSLog("visibleText == %@", visibleText)
self.lable!.text = visibleText
}
private func visibleRangeOfTextView(textView: UITextView) -> NSRange {
let bounds = textView.bounds
let origin = CGPointMake(10,10) //Overcome the default UITextView left/top margin
let startCharacterRange = textView.characterRangeAtPoint(origin)
if startCharacterRange == nil {
return NSMakeRange(0,0)
}
let startPosition = textView.characterRangeAtPoint(origin)!.start
let endCharacterRange = textView.characterRangeAtPoint(CGPointMake(CGRectGetMaxX(bounds), CGRectGetMaxY(bounds)))
if endCharacterRange == nil {
return NSMakeRange(0,0)
}
let endPosition = textView.characterRangeAtPoint(CGPointMake(CGRectGetMaxX(bounds), CGRectGetMaxY(bounds)))!.end
let startIndex = textView.offsetFromPosition(textView.beginningOfDocument, toPosition: startPosition)
let endIndex = textView.offsetFromPosition(startPosition, toPosition: endPosition)
return NSMakeRange(startIndex, endIndex)
}