gpt4 book ai didi

iphone - UITextView 文本的颜色变化

转载 作者:行者123 更新时间:2023-11-29 03:35:55 28 4
gpt4 key购买 nike

我是 iPhone 新手。

我有一个 TextView 。我正在更改 TextView 中所选文本的背景颜色。

但问题是,当我在 textView 中选择多于 1 行时,只有第一行颜色发生变化,其他行颜色没有变化。

所以有人可以告诉我如何更改我选择的所有文本的背景颜色吗??

 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];

最佳答案

发生这种情况的原因是 firstRectForRange 将为您提供一个不会覆盖超过 1 行的矩形。只要文本/选定的文本保留在一行中,矩形就会覆盖它。

原因是:假设您选择了一行半的文本。因此,当您选择文本时,选择颜色将显示选择边界不是矩形。它更像是一个倒L。因此,单个矩形无法覆盖它。

  • 如果您只想突出显示所选文本,则必须使用多个矩形。查看我的代码here 。我用不同的矩形覆盖了多行和单词。您可以设置颜色和透明度 (alpha) 以提供突出显示的感觉。但这里的缺点是,您将无法与该文本进行交互。

  • 如果您想创建一个覆盖所有选定文本的单个矩形,那么它将覆盖选定文本之后的文本,但您可以使用单个矩形。为此,您必须使用 firstRectForRange 两次。一次在选定的第一个单词上,第二次在选定文本的最后一行中选择的第一个单词上。使用 MAXMIN 创建一个覆盖所有文本的矩形。

替代方法UITextView 支持 AttributedText。有了这个,您可以使用具有多个属性(粗体、斜体、彩色文本、彩色背景等)的字符串设置 UITextView 的文本。使用 NSMutableAttributedStrings 来存储文本。添加如下属性:

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

并使用setAttributedTexttextView.attributedText =设置UITextView的文本。这样,您就可以轻松地在文本上添加背景颜色,而无需经历上述所有麻烦。但是,如果您想要的不仅仅是 NSAttributedString 支持的属性,则必须使用上述方法。

关于iphone - UITextView 文本的颜色变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19186259/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com