【发布时间】:2017-05-15 01:46:22
【问题描述】:
我正在尝试创建一个播放音频或视频文件的 MacOS 应用。我已经按照Apple's website here上的简单说明进行操作
但我想使用 File > Open 菜单项来调出 NSOpenPanel,并将其传递给 View Controller。
因此,据推测,Open 操作应该在 AppDelegate 中,因为 ViewController 窗口可能未打开。 然后将文件名传递给 ViewController 窗口的新实例。
对吗?如果是这样,我如何从 AppDelegate 中“调用”视图?
这是 AppDelegate:
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBAction func browseFile(sender: AnyObject) {
let dialog = NSOpenPanel();
if (dialog.runModal() == NSModalResponseOK) {
let result = dialog.url // Pathname of the file
if (result != nil) {
// Pass the filepath to the window view thing.
} else {
// User clicked on "Cancel"
return
}
}
}
这是 ViewController:
class ViewController: NSViewController {
@IBOutlet weak var playerView: AVPlayerView!
override func viewDidLoad() {
super.viewDidLoad()
// Get the URL somehow
let player = AVPlayer(url: url)
playerView.player = player
}
【问题讨论】:
-
您不会从 AppDelegate 调用 WindowController 或 ViewController。事实上,一旦应用程序启动,您就无法做到这一点。您需要通过相应的故事板创建第一响应者连接。
-
那么我如何从只有菜单而没有窗口的情况下实例化视图?
-
@benwiggy 请为您的问题考虑一个更好的名称。你问的是一个非常具体的事情,这里没有概念。
-
欢迎所有建议。