tvOS - 检测 TVML 何时从我的 UIViewController 中解除
tvOS - Detect when TVML is dismissed from my UIViewController
我的应用程序有一个视图控制器,它以模态方式调用另一个视图控制器以用模糊效果覆盖屏幕。在另一个视图控制器中,我正在显示 TVApplicationController
以在这个模糊视图之上显示具有透明背景的 TVML 内容。
let appControllerContext = TVApplicationControllerContext()
guard let javaScriptURL = NSURL(string: AppDelegate.TVBootURL) else {
fatalError("unable to create NSURL")
}
appControllerContext.javaScriptApplicationURL = javaScriptURL
appControllerContext.launchOptions["BASEURL"] = AppDelegate.TVBaseURL
appController = TVApplicationController(context: appControllerContext, window: nil, delegate: self)
appController?.navigationController.modalPresentationStyle = UIModalPresentationStyle.OverFullScreen
self.presentViewController((appController?.navigationController)!, animated: true, completion: nil)
我想要做的是,当我按下 MENU 按钮时,让 TVML 内容消失并关闭我的模态模糊视图控制器。问题是我无法检测到 TVML 内容的 "dismissal",因此我可以关闭模态视图控制器。
我尝试使用 TVApplicationControllerDelegate
来接收使用它时可能会收到的消息,但没有任何帮助。
我刚刚找到了解决方法。我创建了一个像这样的小 class:
import UIKit
class HiddenView: UIView {
override func canBecomeFocused() -> Bool {
return true;
}
}
然后,我所做的是在模糊视图控制器的 ViewDidLoad
上创建此 HiddenView
的实例,并将其添加到视图控制器的视图中。
let hiddenView = HiddenView(frame: CGRectMake(0,0,10,10))
self.view.addSubview(hiddenView)
// it won't appear on the screen since it has no color/text/etc
现在,当我按下遥控器上的 MENU 按钮时,当 TVML 内容被关闭时,我的模糊模式视图控制器上的委托方法 didUpdateFocusInContext
被调用,所以我可以这样关闭它:
override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
self.dismissViewControllerAnimated(true, completion: nil)
}
如果有人知道比必须执行此解决方法更好的方法来处理此问题,那将是很高兴知道的。
我的应用程序有一个视图控制器,它以模态方式调用另一个视图控制器以用模糊效果覆盖屏幕。在另一个视图控制器中,我正在显示 TVApplicationController
以在这个模糊视图之上显示具有透明背景的 TVML 内容。
let appControllerContext = TVApplicationControllerContext()
guard let javaScriptURL = NSURL(string: AppDelegate.TVBootURL) else {
fatalError("unable to create NSURL")
}
appControllerContext.javaScriptApplicationURL = javaScriptURL
appControllerContext.launchOptions["BASEURL"] = AppDelegate.TVBaseURL
appController = TVApplicationController(context: appControllerContext, window: nil, delegate: self)
appController?.navigationController.modalPresentationStyle = UIModalPresentationStyle.OverFullScreen
self.presentViewController((appController?.navigationController)!, animated: true, completion: nil)
我想要做的是,当我按下 MENU 按钮时,让 TVML 内容消失并关闭我的模态模糊视图控制器。问题是我无法检测到 TVML 内容的 "dismissal",因此我可以关闭模态视图控制器。
我尝试使用 TVApplicationControllerDelegate
来接收使用它时可能会收到的消息,但没有任何帮助。
我刚刚找到了解决方法。我创建了一个像这样的小 class:
import UIKit
class HiddenView: UIView {
override func canBecomeFocused() -> Bool {
return true;
}
}
然后,我所做的是在模糊视图控制器的 ViewDidLoad
上创建此 HiddenView
的实例,并将其添加到视图控制器的视图中。
let hiddenView = HiddenView(frame: CGRectMake(0,0,10,10))
self.view.addSubview(hiddenView)
// it won't appear on the screen since it has no color/text/etc
现在,当我按下遥控器上的 MENU 按钮时,当 TVML 内容被关闭时,我的模糊模式视图控制器上的委托方法 didUpdateFocusInContext
被调用,所以我可以这样关闭它:
override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
self.dismissViewControllerAnimated(true, completion: nil)
}
如果有人知道比必须执行此解决方法更好的方法来处理此问题,那将是很高兴知道的。