2015-10-11 7 views
6

Ist es möglich, einen UIView fokussierbar zu machen? Oder sollte ich einfach eine benutzerdefinierte UIButton für alle möglichen Ansichten verwenden?Wie Sie einen UIView mit der Fokus-Engine auf Apple TV fokussierbar machen

Ich versuchte, canBecomeFocused zu überschreiben, aber nichts passierte.

+1

ja, jede UIView ist fokussierbar mit canBecomeFocused. Sie müssen jedoch auch die didUpdateFocusInContext-Methode überschreiben, um den Fokus anzuzeigen. –

Antwort

11

Also das Problem war, dass ich nicht bemerkte, dass meine Zelle den Fokus bekam. Zum Abschluss dieses up, müssen Sie

1) Überschreibung

canBecomeFocused

2) Überschreibung implementieren "didUpdateFocusInContext: withAnimationCoordinator:" Verfahren in der Lage sein, die Zelle zu markieren, wie fokussiert

Swift 2.3:

override func canBecomeFocused() -> Bool { 
    return true 
} 

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

    if context.nextFocusedView == self { 
     coordinator.addCoordinatedAnimations({() -> Void in 
      self.layer.backgroundColor = UIColor.blueColor().colorWithAlphaComponent(0.2).CGColor 
     }, completion: nil) 
    } else if context.previouslyFocusedView == self { 
     coordinator.addCoordinatedAnimations({() -> Void in 
      self.layer.backgroundColor = UIColor.clearColor().CGColor 
     }, completion: nil) 
    } 
} 

Swift 3:

1

Es scheint, dass die Dinge geändert hatten und nun den richtigen Weg, um eine Ansicht fokussierbar zu machen, ist dies:

override var canBecomeFocused : Bool { return true }

0

Swift 3-Version von Pavel Code:

override var canBecomeFocused: Bool { 
    return true 
} 

override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) { 

    if context.nextFocusedView == self { 
     coordinator.addCoordinatedAnimations({() -> Void in 
      self.layer.backgroundColor = UIColor.blue.withAlphaComponent(0.2).cgColor 
     }, completion: nil) 

    } else if context.previouslyFocusedView == self { 
     coordinator.addCoordinatedAnimations({() -> Void in 
      self.layer.backgroundColor = UIColor.clear.cgColor 
     }, completion: nil) 
    } 
}