我的应用程序的视图控制器以模态方式调用另一个视图控制器以覆盖具有模糊效果的屏幕。在其他视图控制器中,我显示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内容消失并取消我的模态模糊视图控制器。问题是,我无法发现"解雇"我可以关闭我的模态视图控制器。
我尝试使用TVApplicationControllerDelegate
来接收使用它时可能出现的消息,但没有任何帮助。
答案 0 :(得分:0)
我刚刚找到了解决方法。我创建了一个这样的小类:
import UIKit
class HiddenView: UIView {
override func canBecomeFocused() -> Bool {
return true;
}
}
然后,我所做的是在模糊视图控制器的HiddenView
上创建此ViewDidLoad
的实例,并将其添加到视图控制器的视图中。
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)
}
如果有人知道更好的方法来解决这个问题而不是必须做这个解决方法,那么很高兴知道。