Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

279
Views
tvOS cómo comprobar si la UITabBar está enfocada

Estoy buscando una manera de hacer una transición personalizada al cambiar el enfoque desde o hacia UITabBar.

Actualmente estoy intentando esto anulando el método didUpdateFocus pero parece que no puedo verificar si la barra de pestañas está enfocada.

La barra de pestañas en sí parece nunca estar en el estado "enfocado":

 override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinatora) { super.didUpdateFocus(in: context, with: coordinator) print(self.tabBar.isFocused) // always false }

Al verificar el UIFocusUpdateContext , el elemento enfocado actualmente es un UITabBarButton .

Pero no puedo verificar si el contexto es una instancia de UITabBarButton porque ese tipo no está disponible:

 context.nextFocusedItem is UITabBarButton // can't compile

Estoy realmente atrapado aquí y me encantaría cualquier sugerencia sobre cómo abordar este problema.

Gracias.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Esta respuesta probablemente no ayudará al OP (se preguntó hace más de un año), pero como estaba luchando con el mismo problema, una presentación de WWDC17 me ayudó a resolverlo:

UIView , UIViewController , UIWindow , etc. se ajustan al protocolo UIFocusEnvironment . La barra de pestañas en sí misma nunca recibe un enfoque directo, por lo que la forma correcta de verificar si uno de sus botones tiene el foco es verificando si su entorno contiene el UIFocusItem:

 override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) { if let nextFocusedItem = context.nextFocusedItem, self.tabBar.contains(nextFocusedItem) { //Do some stuff } }

Estoy seguro de que el autor de la pregunta se dio cuenta de esto hace mucho tiempo, pero pensé en lanzar esta respuesta para cualquier otra persona que tenga la misma pregunta más adelante.

over 4 years ago · Santiago Trujillo Report

0

Primero agregue la extensión para UIView si tiene superview:

 public func hasSuperView(_ view: UIView) -> Bool { if self == view { return true } if let superview = superview { return superview.hasSuperView(view) } return false }

Luego agregue la extensión para UIFocusUpdateContext para verificar si la vista tiene foco:

 public func viewHasFocus(_ view: UIView) -> Bool { guard let nextFocusedView = nextFocusedView else { return false } return nextFocusedView.hasSuperView(view) || view.hasSuperView(nextFocusedView) }

Luego use el contexto en este método para verificar si la barra de pestañas tiene foco:

 override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) { if context.viewHasFocus(tabBar) {} }

También anule este método en su subclase UITabBarController

over 4 years ago · Santiago Trujillo Report

0

Creé una extensión en UIView que verificará si hay un foco en algún lugar de su jerarquía:

 func containsFocus() -> Bool { if self.isFocused { return true } else { for subview in self.subviews { if subview.containsFocus() { return true } } return false } }

De esta manera, puede verificar si su UITabBar tiene foco.

Nota:

Esta es una forma muy costosa de verificar si su vista tiene foco, porque es una función recursiva y potencialmente atravesará toda la jerarquía de su vista.

Consejo:

Si está intentando implementar una transición personalizada al seleccionar pestañas en UITabBar, debe usar el método UITabBarDelegate:

 func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem)

Si no, simplemente ignora este consejo.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!