2013-07-09 6 views
5

UITextViewの文字列として現在の行を取得する方法(クレイジーハック歓迎)はありますか?これは、この場合には、例えば、ワードラップなどが含まれます:UITextViewは現在の行を取得します

enter image description here

メソッドが返すことがカーソルに基づいて、現在の行であるため、「スタックオーバーフローを、それは素晴らしいではありませんI?」 。

また、カーソルの位置に基づいて、「これは私が行ったテストです」または「考えています」と返すこともできます。私は、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); 

これは機能しません。私はそれは単語がラップされているか、または異なるサイズの文字があるかもしれないと思うが、左の値は一貫していないか、または最初の行の後ろにある。

+0

を働いたあなたは(私はUITextInput'は '言うだろう持っているどれだけ近いか、あなたは試してみましたが、コードとそれが実際に返さを表示します正しいアプローチ)。 – Wain

+0

メインの質問を – roozbubu

+1

に更新します。これを参照してください - http://stackoverflow.com/questions/4421267/how-to-get-text-from-nt-line-of-uilabel/14413484#14413484 – TheTiger

答えて

0

私はUITextInputのcaretRectメソッドを使用して、左からオフセットを取得しました。完璧に働いた。

+1

作業コード他人に見せるために? – jonathanpeppers

+0

@jonathanpeppers残念ながら、私はできません。これは私が前の夏にしていた有料のインターンシップのためで、コードにはアクセスできません。 – roozbubu

+1

サンプルを自分で再実装して投稿できますか?これはStackOverflowのポイントであるように見えますが、実際に答えが含まれていない限り、受け入れられた答えであってはなりません。 – jonathanpeppers

2

次のコードの解決策が動作しているようです。このコードの「自己」は、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]); 
0

これが私のために(自己= UITextView)

func getLineString() -> String { 
    return (self.text! as NSString).substringWithRange((self.text! as NSString).lineRangeForRange(self.selectedRange)) 
} 
関連する問題