我有一个Swift3 tvOS应用程序,我使用performSegue(withIdentifier:...)从一个ViewController转换到另一个。在第二个ViewController中,我使用menu按钮进行UI交互,使用pressBegan和press.type == UIPressType.menu。
如果直接输入第二个ViewController(即默认的ViewController),这可以正常工作,但是通过转换,应用程序再次显示第一个ViewController,当按下菜单按钮时(菜单在tvOS中再加倍)。我的第二个ViewController也获取了密钥,但是UI结果从未显示,因为第二个ViewController消失了。我尝试过不同的segue类型,但无济于事。
问题:
1)有没有办法“消费”菜单键事件,所以它永远不会进入操作系统?
2)或者,我可以以某种方式做出“单向思考”吗?
3)备选方案2:我可以通过编程方式取消设置两个ViewControllers之间的关系吗?是什么使一个“父母”到另一个?我不使用导航控制器或任何东西,因此它必须是segue。
谢谢,
答案 0 :(得分:1)
如果要在没有UINavigationController
的情况下实现应用程序的这一部分,可以通过编程方式设置根UIViewController
。首先,将一些故事板ID添加到ViewController2
中的Main.storyboard
。然后,替换这部分代码:
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和菜单按钮的处理程序将按你的意愿工作(没有后退)。