Ich habe einen UIViewController in meiner tvOS-App, der nur für ein paar Sekunden erscheint und eine vollständig anpassbare MENU-Tastenbedienung benötigt. Ich erstelle es so:
%Vor% Ich zeige den View-Controller mit pushViewController:animated:
:
Ich habe festgestellt, dass, wenn der Benutzer MENU drückt, sobald der Bildschirm erscheint, während der Cross-Fade-Übergangseffekt immer noch angezeigt wird, sie dem UITapGestureRecognizer ausweichen und zu einem vorherigen Bildschirm zurückkehren können nicht beabsichtigt. Sie können auch Probleme verursachen, indem Sie MENÜ immer wieder neu mischen - schließlich werden sie aus Dingen entkommen, die sie nicht können sollten.
Wie kann ich sicherstellen, dass die MENU-Taste immer meine Übersteuerung erreicht? Gibt es eine Möglichkeit, einen App-umfassenden MENU-Button-Handler anzugeben und trotzdem einen UINavigationController zu verwenden?
Eine Lösung, die für mich funktionierte, war die Installation eines UITapGestureRecognizer auf self.navigationController.view
. Alle Tippfehler, die von den regulären UIViewControllern übersehen werden, werden stattdessen vom Recognizer des Navigationscontrollers abgefangen. Wenn Sie UITapGestureRecognizers auf jedem von Ihnen erstellten View-Controller installieren, sind die einzigen Taps, die durch die Risse des Navigations-Controllers fallen, Taps, die mitten im Übergang auftreten, und es ist sicher, diese Taps vollständig zu ignorieren.
Beachten Sie, dass wenn Sie möchten, dass MENU zum Home-Bildschirm zurückkehrt, Sie diesen Tap-Recognizer vorübergehend entfernen müssen und tvOS den Tap eigenständig handhaben muss, da ich keinen sauberen Weg finden konnte, um zum Home-Bildschirm zu gelangen Mein Code (kurz von exit(0)
).
Ich habe wegen dieses Verhaltens ein sehr ähnliches Problem.
In meinem Fall habe ich ein benutzerdefiniertes Fokus-Management, abhängig von der Klick-Taste der MENU-Taste, die bei pressesEnded
erkannt und von preferredFocusedView
verwaltet wurde. Aber wenn Navigation Controller ViewController und Benutzer zu diesem Zeitpunkt poping machen zweiten Klick auf MENU-Taste, dann UINavigationController
klasse erkennen pressesEnded
und dann preferredFocusedView
auf meinem Ziel ViewController, wo ist meine Verwaltung, aber pressesEnded
wird nicht aufgerufen , weil von UINavigationController
"gestohlen" wurde.
Lösung für dieses Problem in meinem Fall ist, "dummy" -Klasse zu erstellen, die von UINavigationController wie folgt verwendet wird:
%Vor%Tags und Links uiviewcontroller tvos uitapgesturerecognizer siri-remote