iOS:所选 UITableViewCell 的 UITextField 颜色错误

Posted

技术标签:

【中文标题】iOS:所选 UITableViewCell 的 UITextField 颜色错误【英文标题】:iOS: wrong UITextField color of selected UITableViewCell 【发布时间】:2018-08-28 20:43:02 【问题描述】:

当 UITextField 颜色被选中时,我遇到了属于 UITableViewCell 的问题。

我已使用以下代码更改了默认 UITableViewCell 选择颜色,该代码在使用参数启动应用程序时从 AppDelegate 调用:

UITableView.appearance().backgroundColor = backgroundColor
UITableViewCell.appearance().backgroundColor = backgroundColor
UITableViewCell.appearance().tintColor = tintColor
let colorView = UIView()
colorView.backgroundColor = ColorThemes.uiTableViewCellSelectedBackgroundColor
UITableViewCell.appearance().selectedBackgroundView = colorView

UITextField.appearance().textColor = ColorThemes.textColorNormal
UITextField.appearance().backgroundColor = ColorThemes.uiTextFieldBackgroundColor
UITextField.appearance().tintColor = UIColor.gray
UITextField.appearance().keyboardAppearance = ColorThemes.uiKeyboardAppearance

此代码取自 Internet 和 *** 的答案之一。

带有标签的普通单元格一切正常。但是我对里面有 UITextField 的 UITableViewCells 有疑问。当单元格刚刚被选中时,它以绿色突出显示,文本字段看起来很好。 但是之前选择的其他单元格(处于选定状态)存在文本字段颜色问题。在下面的图片中很清楚。 我检查了 UI Hierarchy,并打印了所有三个视图的描述,它们都有相同的描述:

Printing description of $30:
<_UITextFieldRoundedRectBackgroundViewNeue: 0x7fdeb209ac80; frame = (0 0; 70 30); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; tintColor = UIExtendedGrayColorSpace 1 1; layer = <CALayer: 0x60000280d980>>
Printing description of $31:
<_UITextFieldRoundedRectBackgroundViewNeue: 0x7fdeaedb2b30; frame = (0 0; 70 30); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; tintColor = UIExtendedGrayColorSpace 1 1; layer = <CALayer: 0x600002801180>>
Printing description of $32:
<_UITextFieldRoundedRectBackgroundViewNeue: 0x7fdeb209e090; frame = (0 0; 70 30); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; tintColor = UIExtendedGrayColorSpace 1 1; layer = <CALayer: 0x60000287ac60>>

【问题讨论】:

“此代码取自 Internet 和 *** 的答案之一。”这可能是问题开始的地方。首先,我建议不要使用.appearance(),因为它适用于全球。有用例,但上面的引用让我觉得没有用例。相反,您可以只为文本字段和单元格的视图提供背景色,然后当单元格被选中时,更新单元格的视图 backgroundColor 属性。 @KyleH 好吧,我想在全球推广。我只是没想到会出现这种行为。 【参考方案1】:

根据 KyleH 的建议,我已将以下代码添加到我的表格视图中,其中包含 UITextField:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

    let cell = tableView.cellForRow(at: indexPath) as! CommonMenuTableViewCell
    cell.itemPriceTextField.backgroundColor = ColorThemes.uiTextFieldBackgroundColor


我已将所需颜色设置为 UITextField 背景颜色属性。

【讨论】:

以上是关于iOS:所选 UITableViewCell 的 UITextField 颜色错误的主要内容,如果未能解决你的问题,请参考以下文章

更改所选 UITableViewCell 的背景颜色

iOS7 中选定 UITableViewCell 的奇怪行为

更改所选单元格的背景颜色?

将 UITableViewCell 变成 UIView

具有 2 种附件类型的 UITableViewCell

UITableViewCell 设置选中的图片