UITextView在禁用可选属性时无法设置文本颜色

10

设置:

我在基于storyboard的视图中添加了一个简单的TextView,并在ViewController的.m文件中建立了一个Outlet引用。 我使用这个引用来设置文本,例如[_textViewOne setText:@"测试文本"];。 我正在使用编译iOS 8.1的Xcode 6.1。

场景:

我想要让UITextView像UILabel一样不可选,但又因为我的文本可能是1行或2行,而UILabel在一个线性排列的视图中垂直居中对齐文本,在两行网格中从左上角开始,这是可以通过textview轻松实现的。

为了使它不可选,首先我从Storyboard中禁用了selectable属性并尝试运行应用程序。 取消选择selectable属性后,我的文本视图的文本没有使用我为其设置的颜色(我已经设置了红色),而是使用默认的黑色。

enter image description here

如果我勾选selectable,文本颜色将遵循我在界面构建器中设置的任何内容。

问题:

  1. 为什么从界面构建器中取消选择selectable属性不会遵循我为textview设置的文本颜色。

  2. 我还注意到一件事,如果我从接口建设者中取消选择selectable属性,并尝试像_textViewOne.selectable = YES;这样以编程方式设置它,那么TextView也不会遵循我在接口构建器中设置的文本颜色,只有从接口构建器中检查该属性才有效。(尝试使用干净的构建,重新启动xcode)

我知道我只需要将TextView的用户交互设置为禁用以使其不可触摸,但我不小心取消了"selectable"选项并花费了一些时间才弄清楚发生了什么,所以我想知道我是否做错了些什么,或者这是某种问题,还是这个控件的正确行为。


iOS中存在一个bug:改变文本将同时改变颜色。您需要在更改文本之后更改文本颜色,即tv.text = @"asd"; tv.textColor = [UIColor whatever]。 - Borzh
3个回答

5

看起来这个bug在iOS 10上已经被修复了。

然而,当我在我们的Bug跟踪器中看到这个bug时,我非常惊讶,在iOS 10上无法复现,但在iOS 9上成功地复现了它。

在我的情况下,解决方案是按照以下顺序在代码中编写:

textView.textColor = UIColor.red
textView.isSelectable = false

附言

textViewOne.userInteractionEnabled = false 对我来说不起作用,因为我想要文本视图可以滚动,但没有选择选项。


这绝对是一个奇怪的错误! - Fattie

2

要禁用textView的交互(使其无法触摸),您可以使用以下方法:

_textViewOne.userInteractionEnabled = NO;

感谢您的回答,Ben。但是,正如我在问题中已经提到的那样,我知道您提供的解决方案,我需要解决问题1和2的答案。 - Aditya Deshmane

0

虽然这是一个老问题,但我昨天刚遇到了这个问题。这个问题和答案对我很有帮助。

但是由于我的UITextView在表格单元格中,所以isSelectable = false不可用。以下是对我有效的方法:

  1. 在Storyboard中,保留勾选userInteractionEnabledUITextView
  2. 在代码中,设置UITextViewtextColor,然后使用setUserInteractionEnabled:将其设置为NO

self.textView.textColor = [UIColor blackColor]; [self.textView setUserInteractionEnabled:NO];

使用setUserInteractionEnabled:而不是.userInteractionEnabled是有效的区别。

希望这能进一步帮助任何仍在尝试支持iOS 9的人。


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