1

我的应用程序有一个视图控制器,它以模态方式调用另一个视图控制器,以模糊效果覆盖屏幕。在这个另一个视图控制器中,我在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 内容的“解雇”,因此我可以关闭我的模态视图控制器。

我尝试使用TVApplicationControllerDelegate接收在使用它时可能出现的消息,但没有任何帮助。

4

1 回答 1

0

我刚刚找到了解决方法。我创建了一个这样的小班:

import UIKit

class HiddenView: UIView {

    override func canBecomeFocused() -> Bool {
        return true;
    }
}

然后,我所做的是在模糊视图控制器HiddenView上创建一个 this 的实例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)
}

如果有人知道比必须执行此解决方法更好的方法来处理此问题,那么很高兴知道。

于 2015-11-04T10:59:36.733 回答