在iOS10中更改UIDatePicker的文字颜色

3

在 iOS 10 版本之前,我有一种方法可以更改 UIDatePicker 的文本颜色,但是在 iOS 10 上这些解决方案似乎不再起作用。我该如何恢复更改 UIDatePickertextColor 的能力?

   if #available(iOS 10.0, *) {
        //Not sure of a way to do something similar here.
   } else {
        //The following lines change the textColor of UIDatePicker to white in iOS9 and older.
        self.setValue(UIColor.white, forKey: "textColor")
        self.sendAction(Selector("setHighlightsToday:"), to: nil, for: nil) 
   }

你可以使用表视图创建自定义选择器。这有点复杂,但你可以自定义你想要的一切。 - Janmenjaya
3个回答

6

似乎没有任何变化,因为我能够使用 Swift 3 来实现它,如下所示。

import UIKit

class ViewController: UIViewController
{
    override func viewDidLoad()
    {
        super.viewDidLoad()

        let temp: UIDatePicker = UIDatePicker(frame: self.view.frame)
        temp.setValue(UIColor.purple, forKey: "textColor")

        view.addSubview(temp)
    }

    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
    }
}

1
如果没有通过编程方式设置,您也可以使用检查器进行设置。在“用户定义的运行时属性”下,您可以将 keypath 值设置为 textColor,将 type 设置为 Color - eshirima
从你的代码中,你似乎有一个名为setHighlightsToday()的函数。你确定你没有在其他地方调用它吗?尝试将其注释掉以及任何可能干扰它颜色的其他代码。 - eshirima
两个选项:
  1. 提供您的VC完整代码,因为我真的无法调试您的代码。
  2. 创建一个picker的outlet,然后在您的viewDidLoad中尝试以编程方式更改它。
- eshirima
让我们在聊天中继续这个讨论 - eshirima
2
UIDatePicker位于一个单元格中,我正在init?(coder aDecoder: NSCoder)方法中执行代码。有趣的是,在之前的iOS版本中这个方法可以正常工作,但在iOS 10中我不得不将其移动到layoutSubviews()方法中。现在它可以在所有iOS8/9/10版本上正常工作。 - AppreciateIt
显示剩余4条评论

3

打开选择器后,文本颜色似乎会重置。

我通过使用以下方法成功地更改了文本颜色:

setValue(UIColor.white, forKey: "textColor")

在日期选择器出现在屏幕上后,尽快进行操作,这样就不会引起注意。
我不确定您如何使用选择器,但我将其设置为文本字段的输入视图,因此可以使用文本字段委托:
func textFieldDidBeginEditing(textField: UITextField)

要知道选择器何时被打开。

我确实需要稍微延迟调度它才能正确生效。

更新

不要使用UIDatePicker的私有textColor属性,可以通过使用出现和UILabel的公共textColor属性来更好地实现此目的。

UILabel.appearanceWhenContainedInInstancesOfClasses([UIDatePicker.self]).textColor = UIColor.whiteColor()

它仍然需要在日期选择器显示后调用才能生效。


Swift 4 更新 -> UILabel.appearance(whenContainedInInstancesOf: [UIDatePicker.self]).textColor = UIColor.white - Peter Suwara

1
你正在使用的代码设置了UIDatePicker的私有属性。这就是使用私有属性的危险所在。无法保证它会在下一个操作系统版本中正常工作。
如果苹果检测到你所做的事情,他们将拒绝你的应用程序。
除非存在公共接口来完成此操作,否则可能没有办法。(我不知道有关更改日期选择器文本颜色的公共接口。)

而且...它在iOS 14中出现了故障。 - Aliaksandr Bialiauski

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