我正在开发 Apple TV应用(tvOS),其中第一个视图控制器通过打开第二个视图控制器原因请看即可。当我在第二个视图控制器上选择一个选项时,它会在第一个视图控制器上执行一个展开操作。
我的问题是当我按下远程菜单按钮时,第二个视图控制器模式自动解除,我发现无法在第一个视图控制器上执行操作或被通知。
如何通过遥控器的菜单按钮来检测通过segue打开控制器的时间?
┌─────────────┐ ┌─────────────┐
│ First View │ ┌─────┐ │ Modal View ├──┐
│ Controller ├────┤segue├────▶ Controller │ │
└─────────────┘ └─────┘ └─────────────┘ │
┌────────────┐ ┌───────┐ │
│ Modal Auto │ │ Menu │ │
Action ?? ◀──┤ Dismiss ◀──────│Button │◀─┘
└────────────┘ └───────┘
答案 0 :(得分:1)
我相信这是你想要完成的事情
// Put this in your FirstViewController
@IBAction func returnToFirstViewController(segue:UIStoryboardSegue) {
print("This is called after modal is dismissed by menu button on Siri Remote")
}
// Put this in your SecondViewController
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let tapRecognizer = UITapGestureRecognizer(target: self, action: Selector("handleMenuPress:"))
tapRecognizer.allowedPressTypes = [UIPressType.Menu.rawValue]
view.addGestureRecognizer(tapRecognizer)
}
func handleMenuPress(recognizer: UITapGestureRecognizer) {
self.performSegueWithIdentifier("YourUnwindSegueIdentifier", sender: nil)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "YourUnwindSegueIdentifier" {
// do any cleanup activities here if you need
}
}
现在你必须建立一些故事板连接。进入你的SecondViewController并按住Ctrl键从你的Controller图标拖动到你的Exit图标,你会看到一个下拉列表:
选择连接它的方法,然后您将在故事板中的SecondViewController中看到Unwind Segue。给该segue标识符名称为“YourUnwindSegueIdentifier”(因此我的示例代码将起作用 - 或使用您想要的任何名称)。构建并运行,这应该可以满足您的需求。
答案 1 :(得分:0)
第一个视图控制器:
@IBAction func modalDismissed(segue: UIStoryboardSegue) {
print("Modal dismissed")
}
模态视图控制器:
override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
for item in presses {
if item.type == .Menu {
self.performSegueWithIdentifier("dismissModal", sender: nil)
}
}
super.pressesBegan(presses, withEvent: event)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "dismissModal" {
print("Modal Dismiss")
}
}
答案 2 :(得分:0)
这就是使用 Swift 5 时对我有用的方法:
private func setupRemoteGesture() {
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleMenuPress))
tapRecognizer.allowedPressTypes = [NSNumber(value: UIPress.PressType.menu.rawValue)]
view.addGestureRecognizer(tapRecognizer)
}
@objc private func handleMenuPress() {
// Menu button pressed
}