15

私はストーリーアプリに取り組んでいます.どこにクイズを提供する必要があります. 今、私は物語を持っていますが、その物語の上にいくつかの空白や隠された言葉があります. その隠された単語をクリックすると、それに答える 4 つの選択肢が表示されます。単語の上にボタンを配置してみましたが、それは静的な位置を使用している場合のみです。その上にボタンを配置してこれを非表示にできるように、非表示にする必要があるその単語のフレームを取得する方法を知りたいだけです。

下の画像を見ることができます..ここに画像の説明を入力 すべての回答をいただければ幸いです

解決策:- これは iOS 5 以降でのみ機能します。

- (CGRect)frameOfTextRange:(NSRange)range inTextView:(UITextView *)textView
{
    UITextPosition *beginning = textView.beginningOfDocument; 
    UITextPosition *start = [textView positionFromPosition:beginning offset:range.location];
    UITextPosition *end = [textView positionFromPosition:start offset:range.length];
    UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end];
    CGRect rect = [textView firstRectForRange:textRange]; 
    return [textView convertRect:rect fromView:textView.textInputView];



}

ありがとう

エラーについては、もう 1 つの画像を参照してください。 ここに画像の説明を入力

4

4 に答える 4

19

UITextViewUITextInputプロトコルを採用しています。そのプロトコルには、-firstRectForRange:文字の範囲をカバーする長方形を通知するメソッドがあります。文字の範囲が複数行にまたがる場合は、繰り返し呼び出す必要があります。初めてそれはあなたに最初の四角形を与え、それがカバーする範囲を教えてくれます。次に、質問している範囲を、関心のある残りの文字になるように調整し、繰り返します。

于 2012-04-25T11:24:37.680 に答える
2

Ken Thomases の回答に続いて、iOS 6 以降、UITextInputプロトコルには次のメソッドが含まれます。

- (NSArray *)selectionRectsForRange:(UITextRange *)range

(参照ドキュメントを参照してください)。

結果は、UITextSelectionRectテキスト内の選択範囲に関する多くの情報を含む の配列です...テキストチャンクの四角形をどのように使用したいかによっては、上記の方法が役立つ場合があります。

( UITextSelectionRect リファレンス)。

: での私の使用法から、返される sUITextViewの配列にUITextSelectionRectは、解釈される可能性のある 2 つの追加の選択四角形が含まれます。これらは配列内の最後の 2 つの選択範囲であり、選択範囲の開始位置と終了位置に対応していると思います。これらの選択範囲はそれぞれ の幅を0持ち、それに応じてcontainsStart/containsEndプロパティが設定されます。

于 2014-03-25T14:07:55.213 に答える
2
-(void)textViewDidChangeSelection:(UITextView *)textView
 {
  NSRange range = textView.selectedRange;
 if(range.location<textView.text.length)
  {
    NSString * firstHalfString = [txtView.text substringToIndex:range.location];

    NSString *temp = @"s";
    CGSize s1 = [temp sizeWithFont:[UIFont systemFontOfSize:15] 
                          constrainedToSize:CGSizeMake(self.view.bounds.size.width - 40, MAXFLOAT)  // - 40 For cell padding
                              lineBreakMode:UILineBreakModeWordWrap]; // enter you textview font size

    CGSize s = [firstHalfString sizeWithFont:[UIFont systemFontOfSize:15] 
                           constrainedToSize:CGSizeMake(self.view.bounds.size.width - 40, MAXFLOAT)  // - 40 For cell padding
                               lineBreakMode:UILineBreakModeWordWrap]; // enter you textview font size


    //Here is the frame of your word in text view.
    NSLog(@"xcoordinate=%f, ycoordinate =%f, width=%f,height=%f",s.width,s.height,s1.width,s1.height);

     CGRect rectforword = CGRectMake(s.width, s.height, s1.width, s1.height);
    // rectforword is rect of yourword


    }
    else
    {
        // Do what ever you want to do

     }   
}

>>>編集しました...

このメソッドは、テキストビューのテキストを選択またはタップすると呼び出されますが、このメソッドは任意の UITextViewDelegateメソッドで使用できます

うまくいけば、これはあなたを助けるでしょう...楽しんでください

于 2012-04-25T10:53:16.930 に答える