tvOS 中的 UIButton 自定义背景颜色

UIButton custom backgroundColor in tvOS

我的 TVos 应用程序中有一个 UIButton,我想在其中更改 backgroundColor 以及 titleLabel 的字体。

当按钮获得焦点时,文本、字体和 backgroundColor 应该相同,但应该显示为 focused view

我的 ViewDidLoad:

中有这三行代码
   orderButton.titleLabel?.font = UIFont(name: "RobotoCondensed-Regular", size: 40)
   orderButton.setBackgroundImage(getImageWithColor(UIColor(rgba: "#1db5b5")), forState: [.Focused, .Normal])
   orderButton.setTitleColor(UIColor.whiteColor(), forState: [.Focused, .Normal])

问题

当我的视图加载时,我的按钮仍然是默认的灰色。当它聚焦时,它会得到我在 ViewDidLoad.

中设置的颜色

有什么帮助吗?

你必须分别指定两个状态,像这样

 orderButton.setBackgroundImage(getImageWithColor(UIColor(rgba: "#1db5b5")), forState: .Focused)
 orderButton.setBackgroundImage(getImageWithColor(UIColor(rgba: "#1db5b5")), forState: .Normal)

正如文档所说

  func setBackgroundImage(_ image: UIImage?,forState state: UIControlState)

我们一次只能指定一个状态

您可以覆盖 didUpdateFocusInContext 方法来实现此目的。 假设您的按钮的标签设置为 1。现在您可以这样做:

     override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {

        if let nextFocusedView = context.nextFocusedView {
          if button.tag == 1 {
       // Change the font and background color here for Focused state
            }
        }

    if let previousFocusView = context.previouslyFocusedView {
         if button.tag == 1 {
     // Change the font and background color here for Non-Focused state
         }
}