2016-05-25 5 views
0

Ich habe eine UITextView. Auf dieser Textansicht habe ich etwas Text. Aber wenn ich die Größe verändere (die Höhe der Textansicht abnehmend) die TextView dann ist nur Text mit 2 Zeilen sichtbar.Wie erhält man sichtbaren Text als String in einem TextView in iOS?

So wie bekomme ich diesen sichtbaren Text als Zeichenfolge. Ich meine, wie kann ich diesen sichtbaren Text von der Haupttextfolge trennen.

Die folgenden Bilder sind als Referenz.

enter image description here

enter image description here

Ich brauche nur consectetaur Cillium adipisicing pecu, nicht sed eiusmod incididunt ut labore et Text als String aus Saitenset tempor.

Wie kann ich es bekommen?

+0

https://gist.github.com/wess/ 5161817 –

+0

Mögliches Duplikat von http://stackoverflow.com/questions/9283188/how-to-efficiently-find-cgrects-for-visible-words-in-uitextview –

+0

Es ist kein Duplikat q. dass q ist diff mein q ist diff. –

Antwort

1

Ja, ich habe es :) :)

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) 
} 
+0

funktioniert es ?? Ich denke, es wird nicht den richtigen Bereich zurückgeben – Lion

+0

Ja, es gibt zurück .... –