更改UITextView的字体颜色

23

我有一个UITextView,用户可以在其中输入文本。假设用户已经输入了一些值,我如何通过点击按钮将已经输入的文本以及未来输入的文本颜色更改为其他颜色?

我已经设置好了更改文字颜色的方法,但前提是我必须在开始输入文本之前就选定好要使用的颜色。如果我在开始输入文本之后尝试更改颜色,它将不起作用。

我的代码如下:

-(IBAction)changeInkColor:(id)sender
{
    [inkTextField setTextColor:[UIColor greenColor]]; 
    inkTextField.text=@"text";
}

如果视图中没有文本,则以下内容可以使文本显示为绿色,而且它实际上是有效的:“text”。但是,如果我输入了一些文本,然后点击此按钮,什么也不会发生。

6个回答

24

我刚试过了,没有遇到任何问题。我设置了一个按钮,调用了[myTextView setTextColor:[UIColor redColor]];

在黑色文本颜色下输入一些内容后,我按下了按钮,所有的文本都变成了红色。之后我继续输入,所有文本颜色都是红色。

你也是使用setTextColor:来实现这个功能吗?


是的,我正在做这个:-(IBAction)changeInkColor:(id)sender { [inkTextField setTextColor:[UIColor greenColor]]; } - Snowman
那么,在您在文本视图中输入文本并单击按钮后,按钮方法没有被调用? - pinerd314159
没有调用,但是它并不执行任何操作。 - Snowman
以编程方式实现,但与IB相关联。 - Snowman
@mohabitar 让我们在聊天室里继续这个讨论 - pinerd314159
显示剩余5条评论

19

最终,setTextColor: 就是答案。然而,在之前的答案中有一个重要的细节被省略了:为了使其在iOS 8上实现,我必须在设置文本后设置颜色。

因此,

- (void)viewDidLoad
{
    [super viewDidLoad];

    _myTextView.textColor = [UIColor whiteColor];
    _myTextView.text   = @"yadda yadda yadda...";

    // etc., snip

未起作用,而

- (void)viewDidLoad
{
    [super viewDidLoad];

    _myTextView.text   = @"yadda yadda yadda...";
    _myTextView.textColor = [UIColor whiteColor];

    // etc., snip

DID work. 这让我觉得这是 iOS 8 的一个 bug,我将撰写报告。


2
FYI,这仍然是解决方案。它修复了我的问题。如果我在textColor之前设置文本,文本将保持黑色。如果我在文本后设置颜色,它就可以正常工作。 - matcartmill
1
@matcartmill,你的评论中有一个错别字。你的第三和第四句描述了相同的情况,但结果不同。将文本(1)设置在textColor(2)之前-->文本为黑色。先设置文本(1),然后设置颜色(2)-->它可以正常工作。你的最后一句话是正确的。 - Gary Z
1
应该是被接受的答案。在文本固定后设置文本颜色解决了我的问题。 - Borzh

1
在IB中,您可以通过切换textColor按钮(位于第6个按钮)来解决此问题(至少在Xcode 8.2中)。选择此按钮后,如果您在视图中输入文本之前以编程方式设置了文本颜色,则颜色将“固定”。我没有找到一种优雅的方法来在代码中设置这个文本视图。

UITextView IB settings

然而,您也可以在代码中解决这个问题:
textView.text = @" ";
textView.textColor = UIColor.redColor;
textView.text = @"";

0

非常有趣的是,尽管

[_nameLabel setTextColor: [UIColor redColor]];

没用,

_nameLabel.textColor = [UIColor redColor]];

做得不错。希望对其他人有所帮助。干杯。


0

使用UITextField的属性文本

NSAttributedString *string = [[NSAttributedString alloc]initWithString:self.textField.text attributes:@{NSForegroundColorAttributeName:color}];
self.textField.attributedText = string;

0

我和你遇到了同样的问题,后来我意识到文本没有改变颜色,因为默认情况下是红色,因为我做了以下操作:

placeholder = @"Welcome";

替代

 WelcomeField.text = @"Welcome";

希望能有所帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接