0

I have an UITextView. On that textview I have some text. But when I resize (decreasing the height of textview) the TextView then only 2 line text is visible.

So How can I get that visible text as a string. I means how can I split that visible text from main text string.

Below images are for reference.

enter image description here

enter image description here

I need only consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et text as a string from main string.

How can I get it ?

Soumya Ranjan
  • 4,817
  • 2
  • 26
  • 51

1 Answers1

3

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)
}
Soumya Ranjan
  • 4,817
  • 2
  • 26
  • 51