Ich habe eine UIButton in meiner TVos App, in der ich die backgroundColor und auch die Schriftart des titleLabel ändern möchte.

Der Text, die Schriftart und backgroundColor sollten identisch sein, wenn die Schaltfläche fokussiert wird, es sollte jedoch angezeigt werden, dass es sich um eine focused view handelt.

Ich habe diese drei Codezeilen in meinem 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])

PROBLEM:

Wenn meine Ansicht geladen ist, hat meine Schaltfläche immer noch die Standardfarbe Grau. Wenn es fokussiert wird, erhält es die Farbe, die ich in meinem ViewDidLoad festgelegt habe.

Hilfe dazu?

0
Steaphann 4 Jän. 2016 im 11:15

2 Antworten

Beste Antwort

Sie müssen beide Zustände wie folgt separat angeben

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

Wie Docs sagen

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

Wir haben jeweils nur einen Status anzugeben

3
Arslan Asim 4 Jän. 2016 im 09:06

Sie können die didUpdateFocusInContext-Methode überschreiben, um dies zu erreichen. Angenommen, auf Ihrer Schaltfläche ist das Tag auf 1 gesetzt. Jetzt können Sie Folgendes tun:

     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
         }
}
0
Zarif Ahmed 29 Juni 2016 im 12:22