【问题标题】:IOS 7 - Can't set font color of UITextView in custom UITableView cellIOS 7 - 无法在自定义 UITableView 单元格中设置 UITextView 的字体颜色
【发布时间】:2014-02-08 20:55:41
【问题描述】:

我被困在我认为很容易解决的事情上。我有一个包含 UITextView 对象的自定义表格单元格。我希望这个对象中的文本是灰色的。当我在界面生成器中设置颜色时,它显示为灰色,但在模拟器中它仍然是黑色。

下面是它的设置方式:

  1. 应用程序基于主/从模板
  2. 我创建了一个类,它是 UITableViewCell 的子类
  3. 我在类中添加了两个属性,一个用于 UILabel 和一个 UITextView 的插座
  4. 我通过添加 UITextView 更改了默认原型单元格(它已经有一个 UILabel)
  5. 我将原型单元的类更改为我的自定义单元类
  6. 我将单元格中的 UITextView 和 UILabel 连接到单元格类中的两个插座

我更新了 MasterViewController 来填充我的自定义单元格。当我运行模拟器时,就显示数据的自定义单元格而言,一切正常。

正如我之前提到的,当我尝试更改自定义单元格的 UITextView 中文本的颜色时,问题就出现了。如果我在界面生成器中将其设置为浅灰色,则它在模拟器中无效。

我在下面包含了相关的代码 sn-ps 和屏幕截图。我不能 100% 确定什么与问题相关,什么不相关,如果您需要查看我未在下面显示的内容,请询问,我会提供。

** 编辑

当我注销 UITextView 的颜色属性时,它会输出 (null)。请参阅下面的 MasterViewController.m 代码。

自定义单元格 - NTFYNoteCell.h

#import <UIKit/UIKit.h>

@interface NTFYNoteCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UITextView *descriptionText;

@end

取自 MasterViewController.m:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NTFYNoteCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"     forIndexPath:indexPath];

    NTFYNote *note = _notes[indexPath.row];

    cell.titleLabel.text = [note title];
    cell.descriptionText.text = [note shortDescription];

    NSLog(@"TEXTVIEW: %@", cell.descriptionText);
    NSLog(@"TEXT COLOR: %@", cell.descriptionText.textColor); // This outputs (null)

    return cell;
}

从上面的代码中调试出来:

2014-01-19 19:42:52.001 appname[5050:70b] TEXTVIEW: <UITextView: 0xa1bfe00; frame = (14 26; 273 57); text = 'This is a generic descrip...'; clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x8be0530>; layer = <CALayer: 0x8be1fe0>; contentOffset: {0, 0}>
2014-01-19 19:42:52.001 appname[5050:70b] TEXT COLOR: (null)
2014-01-19 19:42:52.004 appname[5050:70b] TEXTVIEW: <UITextView: 0xa1cd400; frame = (14 26; 273 57); text = 'This is a generic descrip...'; clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x8b8fb40>; layer = <CALayer: 0x8bf5300>; contentOffset: {0, 0}>
2014-01-19 19:42:52.005 appname[5050:70b] TEXT COLOR: (null)
2014-01-19 19:42:52.007 appname[5050:70b] TEXTVIEW: <UITextView: 0xe17e000; frame = (14 26; 273 57); text = 'This is a generic descrip...'; clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0xd857bb0>; layer = <CALayer: 0xd85d610>; contentOffset: {0, 0}>
2014-01-19 19:42:52.007 appname[5050:70b] TEXT COLOR: (null)
2014-01-19 19:42:52.009 appname[5050:70b] TEXTVIEW: <UITextView: 0x99af200; frame = (14 26; 273 57); text = 'This is a generic descrip...'; clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x8a81ea0>; layer = <CALayer: 0x8a580c0>; contentOffset: {0, 0}>
2014-01-19 19:42:52.009 appname[5050:70b] TEXT COLOR: (null)

UITextView 连接到我的自定义单元格中的插座:

在界面生成器中将字体颜色设置为浅灰色:

它在 iPhone 模拟器中的样子:

【问题讨论】:

  • 请显示您在哪里创建这些单元格的代码。
  • 我已经添加了 MasterViewController 中设置单元格内容的部分——我认为这是你所要求的。谢谢!
  • 使用 NSAttributedString。见:stackoverflow.com/questions/14287386/…
  • iOS 中存在一个错误:更改文本也会更改颜色。您需要在更改文本之后更改文本颜色,即 tv.text = @"asd"; tv.textColor = [UIColor 随便]。

标签: ios iphone objective-c xcode uitableview


【解决方案1】:

在稍微解决了这个问题后,我带着新信息回到了谷歌,发现了以下 Stack Overflow 问题:

UITextView font is nil

事实证明,如果您不选中 UITextView 属性下的“可选”复选框,它不会响应任何字体更改,包括颜色。

我选中了此框,现在一切正常。

感谢您的帮助!

【讨论】:

  • 为我工作。谢谢。
  • 这让我头疼。谢谢。
  • 多么奇怪的联系。我永远不会想到这一点.. 谢谢
  • 很棒的发现帮我省了很多麻烦
  • 这可能是一个错误吗?设置“可选”后,它起作用了。问题是,我不希望它是可选的
【解决方案2】:

如果您的 UITextView 包含被检测为地址/电话号码/等的文本,您必须设置 tintColor 以更改检测到的项目的文本颜色,如下所示:

self.tvPhone.tintColor = [UIColor blueColor];

【讨论】:

  • 这是唯一适用于在运行 iOS 10 的设备上使用 Xcode 8 为 iOS 8.2 编译的项目的解决方案。谢谢。
【解决方案3】:

我想要我的 UITextView“只读”,但是当我取消选中 Editable 和 Selectable 时,行为不是我所期望的,有时文本颜色没有改变,有时字体被重置,所以我的解决方案是选中 Editable 和 Selectable 并且取消选中界面生成器中启用的用户交互

【讨论】:

  • 对我来说这不是一个好的解决方案,因为它避免了在文本视图中滚动的可能性。
【解决方案4】:

这对我有用。设置可选YES,设置颜色后设置No

cell.txtvComment.selectable = YES;
cell.txtvComment.textColor = [Globals getTextColor]; //set your UIColor
cell.txtvComment.text = comment.commentText;
cell.txtvComment.selectable = NO;

【讨论】:

    【解决方案5】:

    令人费解的是,此更改并未在您的应用中生效,但由于您已为文本字段创建了 outlet,您不妨添加一行代码以编程方式设置颜色:

    cell.descriptionText.textColor = [UIColor grayColor];
    

    这可确保将颜色设置为您想要的颜色,因此您不必依赖界面生成器。

    编辑:你提到你已经尝试过了。我会尝试在您的代码中插入一些 NSLog() 语句,以查看您尝试进行的一系列更改:

    NTFYNoteCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"     forIndexPath:indexPath];
    
    NTFYNote *note = _notes[indexPath.row];
    
    cell.titleLabel.text = [note title];
    NSLog(@"descriptionText color:%@", cell.descriptionText.textColor);
    cell.descriptionText.text = [note shortDescription];
    cell.descriptionText.textColor = [UIColor grayColor];
    NSLog(@"descriptionText color:%@", cell.descriptionText.textColor);
    
    return cell;
    

    如果您得到 (null) 作为输出,那么您的文本字段一定有问题,因为它必须有颜色,甚至是默认颜色(黑色)。将其中一个 NSLog 语句替换为:

    NSLog(@"%@", cell.descriptionText)
    

    确保“descriptionText”实际上指向您的文本字段。它应该,因为您可以使用该指针设置文本。

    【讨论】:

    • 谢谢,我确实试过这个。我在两个地方进行了尝试,在我的自定义单元格的 init 方法和上面显示的设置单元格内容的方法中。它在任何一个地方都不起作用
    • 这真的很奇怪。您是否使用断点或 NSLogs 来确定这部分代码正在被调用?我会使用一系列 NSLog(@"%@", cell.descriptionText.textColor) 来查看设置的颜色以及它是否变回黑色。
    • 谢谢,如果我所做的应该正常工作,我显然在某处搞砸了。我应该把 NSLog 代码放在哪里?
    • 我已将调试代码放入按照您的建议设置单元格内容的方法中。它正在输出 (null) - 为什么会这样?
    • 我在回答中添加了新建议。
    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2011-10-23
    • 2013-11-24
    • 1970-01-01
    • 2012-05-24
    相关资源
    最近更新 更多