Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

280
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda