0

iPhone初心者です。

私はテキストビューを持っています。テキストビューで選択したテキストの背景色を変更しています。

しかし問題は、 textView で複数の行を選択しているときに、最初の行の色だけが変更され、他の行の色は変更されないことです。

だから、誰でもこれについて教えてもらえますか?選択しているすべてのテキストの背景色を変更するにはどうすればよいですか??

 tagValue = textView.tag;

    NSRange r = textView.selectedRange;
 UITextRange     *selectedRange = [textView selectedTextRange];

    if (!selectedRange)
        return;

    CGRect result1 = [textView firstRectForRange:selectedRange];
    frame_selectedText = result1;


self.str_selected =[NSString stringWithFormat:@"%@", [textView.text substringWithRange:NSMakeRange(r.location, r.length)]];
 UIButton  *btnView = [UIButton buttonWithType:UIButtonTypeCustom];
        [btnView setFrame:result1];

 [btnView addTarget:self action:@selector(buttonColorClicked:) forControlEvents:UIControlEventTouchUpInside];
        btnView.backgroundColor = [UIColor colorWithRed:220.0f/255.0f green:248.0f/255.0f blue:188.0f/255.0f alpha:0.5];

    [textView addSubview:btnView];
4

1 に答える 1

1

これが発生する理由はfirstRectForRange、2 行以上をカバーしない長方形が得られるためです。テキスト/選択したテキストが 1 行に収まっている限り、rect はそれをカバーします。

理由: 1 行半に及ぶテキストを選択したとします。そのため、テキストを選択すると、選択範囲の境界が長方形ではないことが選択色で示されます。逆 L に似ています。したがって、単一の四角形で覆うことはできません。

  • 選択したテキストだけを強調表示する場合は、複数の四角形を使用する必要があります。ここで私のコードを参照してください。複数の行と、異なる長方形の単語をカバーしました。色と透明度( )を設定してハイライトalpha感を出すことができます。ただし、ここでの欠点は、そのテキストを操作できないことです。

  • 選択したすべてのテキストを覆う単一の長方形を作成する場合は、選択したテキストに続くテキストをカバーしますが、単一の長方形で作業できます。これには、firstRectForRange2回使用する必要があります。1 回目は選択された最初の単語で、2 回目は選択されたテキストの最後の行で選択された最初の単語です。MAXとを使用MINして、すべてのテキストをカバーする単一の四角形を作成します。

代替メソッド UITextViewは をサポートしAttributedTextます。UITextViewこれにより、複数の属性 (ボールド、イタリック、色付きのテキスト、色付きの背景など) を持つ文字列でテキストを設定できます。NSMutableAttributedStringsテキストの保存に使用します。次のように属性を追加します。

[myAttriButedText addAttribute:NSBackgroundColorAttributeName value:UIColorFromRGB(0x333333) range:NSMakeRange(0, [myAttriButedText length])];

、またはをUITextView使用してテキストを設定します。このようにして、上記のすべての手間をかけずに、テキストに背景色を簡単に追加できます。しかし、s でサポートされている属性以外のものが必要な場合は、上記のメソッドを使用する必要があります。setAttributedTexttextView.attributedText =NSAttributedString

于 2013-10-07T10:11:34.543 に答える