tvOS 中的单向转场

One Way Segue in tvOS

我有一个 Swift3 tvOS 应用程序,我在其中使用 performSegue(withIdentifier: ...) 从一个 ViewController 转换到另一个。在第二个 ViewController 中,我使用菜单按钮进行 UI 交互,使用 pressesBegan 和 press.type == UIPressType.menu.

如果直接输入第二个 ViewController(即默认 ViewController),这会正常工作,但是随着转换,应用程序会再次显示第一个 ViewController,当按下菜单按钮(菜单在 tvOS 中翻倍)。我的第二个 ViewController 也获得了密钥,但是 UI 结果从未显示,因为第二个 ViewController 消失了。我尝试过不同的 segue 类型,但无济于事。

问题:

1) 有没有办法 "consume" 菜单键事件,所以它永远不会到达 OS?

2) 或者,我能以某种方式制作 "one way segue" 吗?

3) 备选方案 2:我可以通过编程取消设置两个 ViewController 之间的关系吗?是什么让一个 "parent" 变成另一个?我不使用导航控制器或任何东西,所以它必须是 segue。

谢谢,

如果您想在没有 UINavigationController 的情况下实现应用程序的这一部分,您可以通过编程方式设置根 UIViewController。首先,在 Main.storyboard 中的 ViewController2 添加一些故事板 ID。然后,替换这部分代码:

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

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

第一个 UIViewController 出现后,您将看到第二个 UIViewController,菜单按钮的处理程序将按您希望的方式工作(无后退)。