Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

278
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda