gpt4 book ai didi

uikit - 我可以在一个应用程序中混合 UIKit 和 TVMLKit 吗?

转载 作者:行者123 更新时间:2023-12-03 01:13:25 27 4
gpt4 key购买 nike

我正在探索 tvOS,我发现 Apple 提供了一套不错的 templates使用TVML编写。我想知道使用 TVML 模板的 tvOS 应用是否也可以使用 UIKit

我可以在一个应用程序中混合使用 UIKit 和 TVMLKit 吗?

我在 Apple Developer Forum 上找到了一个帖子但它并没有完全回答这个问题,我正在通过文档来寻找答案。

最佳答案

是的,可以。显示 TVML 模板要求您使用控制 JavaScript 上下文的对象:TVApplicationController

var appController: TVApplicationController?

该对象有一个与之关联的UINavigationController属性。因此,只要您认为合适,您就可以调用:

let myViewController = UIViewController()
self.appController?.navigationController.pushViewController(myViewController, animated: true)

这允许您将自定义 UIKit View Controller 推送到导航堆栈上。如果您想返回 TVML 模板,只需将 viewController 从导航堆栈中弹出即可。

如果您想知道如何在 JavaScript 和 Swift 之间进行通信,这里有一个创建名为 pushMyView() 的 JavaScript 函数的方法

func createPushMyView(){

//allows us to access the javascript context
appController?.evaluateInJavaScriptContext({(evaluation: JSContext) -> Void in

//this is the block that will be called when javascript calls pushMyView()
let pushMyViewBlock : @convention(block) () -> Void = {
() -> Void in

//pushes a UIKit view controller onto the navigation stack
let myViewController = UIViewController()
self.appController?.navigationController.pushViewController(myViewController, animated: true)
}

//this creates a function in the javascript context called "pushMyView".
//calling pushMyView() in javascript will call the block we created above.
evaluation.setObject(unsafeBitCast(pushMyViewBlock, AnyObject.self), forKeyedSubscript: "pushMyView")
}, completion: {(Bool) -> Void in
//done running the script
})
}

一旦您在 Swift 中调用 createPushMyView() ,您就可以在 JavaScript 代码中调用 pushMyView() ,它会将 View Controller 推送到堆栈上。

SWIFT 4.1 更新

只需对方法名称和转换进行一些简单的更改:

appController?.evaluate(inJavaScriptContext: {(evaluation: JSContext) -> Void in

evaluation.setObject(unsafeBitCast(pushMyViewBlock, to: AnyObject.self), forKeyedSubscript: "pushMyView" as NSString)

关于uikit - 我可以在一个应用程序中混合 UIKit 和 TVMLKit 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305352/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com