gpt4 book ai didi

swift - 循环遍历描述按键后应在屏幕上执行哪些操作的实体

转载 作者:行者123 更新时间:2023-11-30 10:54:30 25 4
gpt4 key购买 nike

如果我没有很好地描述这个问题,请原谅我,我是使用 Swift 编程 MacOS 应用程序的新手。我知道我处理此问题的方式可能是错误的,我只需要有人告诉我正确的方法。

My main app screen

我有一个核心数据应用程序,用于存储名为“项目”的有序实体列表。这些项目旨在描述事件中的单个步骤,该事件描述了屏幕上应发生的情况。如果您了解 Mac 应用程序 QLab,每个项目就像 QLab 中的单个提示。

我创建了一个 Activity 类,旨在读取每个 Item 以确定 Item 类型及其相关信息。一旦确定了 Item 类型,Activity 类就需要呈现一个包含与该特定 Item 相关信息的 View ,然后等待用户按下右箭头键,然后继续处理核心数据存储中的下一个 Item,该过程会重复进行,直到所有项目均已阅读。每次在循环中读取新的 Item 时,用户每次按向右箭头后屏幕上的信息都会发生变化。

问题是我不知道如何以编程方式实现这一点。我有将项目数组作为 NSFetchRequest 检索的代码:

let moc = (NSApplication.shared.mainWindow?.contentViewController?.representedObject as! NSPersistentDocument).managedObjectContext!
let fetchRequest : NSFetchRequest = Item.fetchRequest()
do {
let items = try moc.fetch(fetchRequest)
print("Found " + String(items.count) + " items to use in the activity.")
for item in items {
print(item.itemType)
// How do I pause this loop for a user keypress after using data from this Item to display?
}
} catch {
print("Error retrieving Items")
}

我可以使用 NSEvent.addLocalMonitorForEvents(matching: .keyDown) 检索 keydown 事件,并且我还可以创建 View Controller 以在第二个屏幕上显示信息。我只是不知道应该如何创建“主循环”,可以这么说,以便显示信息,然后应用程序等待用户按下某个键继续...

如果需要更多信息,我可以分享我的项目代码,非常感谢任何可以启发我的人......:)

最佳答案

您可以尝试使用 NSPageController 。在您的 NSPageController 中,您添加一个 ContainerView,它将显示显示每个项目信息的 ViewController。每个 ViewController 都需要一个 Storyboard标识符,例如ViewControllerItem1

您的 NSPageController 类必须符合 NSPageControllerDelegate 协议(protocol)并包含要显示的 ViewController 数组。

override func viewDidLoad() {
super.viewDidLoad()
delegate = self
arrangedObjects = ["ViewControllerItem1", "ViewControllerItem2", "...","ViewControllerItemN" ]
}

关于 NSPageController 文档中的 arrangedObjects 的注意事项:包含页面 Controller View 中显示的对象的数组。

然后,您实现 NSPageControllers viewControllerForIdentifier 以返回当前要在 ContainerView 中显示的 ViewController。

func pageController(_ pageController: NSPageController, viewControllerForIdentifier identifier: String) -> NSViewController {

switch identifier {
case "ViewControllerItem1":
return mainStoryboard().instantiateController(withIdentifier:"ViewControllerItem1") as? ViewControllerItem1
case "...":
default:
}
}

在您实现的按键事件的操作处理程序中。

self.navigateForward(sender) or self.navigateBack(sender)

我也实现了这个方法,但我不记得是否需要它。

func pageControllerDidEndLiveTransition(_ pageController: NSPageController) {
self.completeTransition()
}

关于swift - 循环遍历描述按键后应在屏幕上执行哪些操作的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54114836/

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