【问题标题】:Swift MacOS dismiss nsviewcontroller presented by sequeSwift MacOS 关闭由 seque 提供的 nsviewcontroller
【发布时间】:2021-09-14 11:46:57
【问题描述】:

我对一个 NSViewController 的 segue 和解雇它感到困惑。

在我的 StoryBoard 中,我有一个从 ViewController 到 BlockViewController 的 segue 设置为带有 showBlockVC 标识符的工作表

这是通过单击按钮触发的 segue 代码:

@IBAction func addBlock(_ sender: Any) {
    performSegue(withIdentifier: "showBlockVC", sender: sender)
}

在 BlockViewController 中,我有一个取消按钮,单击它只会关闭 VC:

@IBAction func cancelBlock(_ sender: Any) {
    self.dismiss(self)
}

这在某种程度上有效,BVC 动画消失并且 ViewControlleer 呈现在屏幕上。 (虽然我不确定它是否曾经被删除或只是留在 BVC 下)

我的问题是我需要 VC(根)才能知道 BVC 已被驳回。但是Apple,我不知道什么时候,自从我完成桌面工作以来已经有一段时间了,从dismiss() 中删除了完成处理程序。即使我想在 VC 上调用一个函数,当我将 parent 打印到 BVC 的 viewDidLoad 的日志中时,我会得到 nil。为什么 BVC 不将 VC 视为其父级?

在 VC 中,如果我从 viewWillAppearviewDidAppear 打印到日志,它们只会在 VC 的初始负载上打印。

我确定我接线有误,但我似乎无法弄清楚。任何帮助将不胜感激。

编辑:忘了补充,我正在通过使用通知来解决这个问题,在 BVC 上的 viewWillDisappear 中,我发送了一个通知并在 VC 中设置了一个观察者,但这似乎有点 hacky...

【问题讨论】:

    标签: swift macos segue nsviewcontroller


    【解决方案1】:

    所以在你的代码中你调用 self.dismiss(self) 这个代码工作的原因是因为dismiss的消息被转发到响应者链上。 self.presentingViewController 是你的“ViewController”。 如果您查看文档,则视图控制器无法呈现或关闭自己。如果您想与呈现您的视图控制器进行通信,您可以简单地使用 presentingViewController 属性并将其转换为 ViewController 类型以获得向后通信。不过,您不必传达您正在被解雇的信息。呈现的视图控制器实际上是在解雇你。

    https://developer.apple.com/documentation/appkit/nsviewcontroller/1434439-presentingviewcontroller

    https://developer.apple.com/documentation/uikit/uiviewcontroller/1621505-dismiss

    【讨论】:

    • 问题是关于NSViewControllerNSViewController可以dismiss本身。
    • 你确定吗?因为如果我在我的根视图控制器上调用dismiss,它似乎不起作用。换句话说,我的顶层 vc 窗口。事实上,我在调试器中收到了这条消息 -> dismissViewController:: Error: 也许这个视图控制器没有出现?
    • 怎么称呼dismiss,参数是哪个类?在 Objective-C 中,这些方法被称为 dismissViewController:dismissController:,在 Swift 中它们都被称为 dismiss。如果参数是NSViewController,编译器会调用dismissViewController:
    • 如果我用故事板和 swift 创建一个新的 macOS 应用程序。将 1 个按钮添加到故事板中的视图控制器,并在代码 self.dismiss(self) 中调用操作出口,它会引发异常并出现上述错误。
    • @IBAction func action(_ sender: Any) { self.dismiss(self) }
    猜你喜欢
    • 2016-02-09
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    相关资源
    最近更新 更多