2016-10-17 4 views
0

Ich habe eine Swift3 tvOS App, in der ich mit Hilfe von performSegue (withIdentifier: ...) von einem ViewController auf einen anderen übergehe. Im zweiten ViewController benutze ich die Menu-Taste für die UI-Interaktion mit pressesBegan mit press.type == UIPressType.menu.One Way Segue in tvOS

Dies funktioniert gut, wenn der zweite ViewController direkt eingegeben wird (d. H. Ist der Standard-ViewController), aber mit dem Übergang zeigt die App den ersten ViewController wieder, wenn Sie die Menü-Taste drücken (Menü verdoppelt sich wieder in tvOS). Mein zweiter ViewController bekommt auch den Schlüssel, aber die UI-Ergebnisse werden nie angezeigt, da der zweite ViewController verschwindet. Ich habe es mit verschiedenen Überfahrtstypen versucht, aber ohne Erfolg.

Fragen:

1) Gibt es eine Möglichkeit, die Menütaste Ereignis „verbrauchen“, so wird es nie in die OS?

2) Kann ich alternativ auch einen "Einwegweg" machen?

3) Alternative 2: Kann ich die Beziehung zwischen den beiden ViewControllern programmgesteuert aufheben? Was macht einen "Elternteil" zum anderen? Ich benutze keinen Navigationscontroller oder irgendetwas, also muss es der Übergang sein.

Danke,

+0

Hier ist ein einfaches XCode 8-Problem, das das Problem zeigt: https://drive.google.com/file/d/0B_LVxY3EYs6EOHRCTFpvZ3IzcG8/view?usp=sharing – jensk

+0

Warum verwenden Sie nicht den UINavigationController? –

+0

Wenn es funktioniert, könnte das das Ende sein. Ich habe keinen Navigationscontroller verwendet, weil ich nur von einem VC zu einem anderen wechseln musste und dann für den Rest der Laufzeit der App dort bleiben musste. – jensk

Antwort

1

Wenn Sie diesen Teil der Anwendung implementieren möchten, ohne die UINavigationController, können Sie einfach die Wurzel gesetzt UIViewController programmatisch. Fügen Sie zunächst eine Storyboard-ID zu ViewController2 in Main.storyboard hinzu. Ersetzen Sie dann diesen Teil des Codes:

performSegue(withIdentifier: "toViewController2", sender: self) 

mit

let appDelegate = UIApplication.shared.delegate as! AppDelegate 
let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil) 
let secondViewController = mainStoryBoard.instantiateViewController(withIdentifier: "ViewController2") as! ViewController2 
appDelegate.window?.rootViewController = secondViewController 

Nach dem ersten UIViewController erscheint sehen Sie die zweite UIViewController und Handler-Menü-Taste funktioniert, wie Sie (keine Rücken segue) wünschen.

+0

Ich endete mit einem UINavigationController, und dann einfach self.navigationController.viewControllers = [self] – jensk

Verwandte Themen