【问题标题】:Swift dismissViewController from Segue - macOS来自 Segue 的 Swift dismissViewController - macOS
【发布时间】:2017-07-08 07:01:10
【问题描述】:

我有一个辅助 ViewController,它通过 Storyboard segue 以编程方式显示:

func actioncall ()
{
    performSegue(withIdentifier: "showIgnoreVC", sender: self)

}

)

此函数是主 ViewController 的一部分,通过 AppDelegate 的 NSNotification 调用,而这又由菜单项单击触发。

但是,即使 segue 连接到主 ViewController,以下代码也不会关闭辅助视图:

@IBAction func dismiss(_ sender: Any)
{
    print("Hello?  Gonna close?")

    self.presenting?.dismissViewController(self)
}

没有错误,该函数在正确的Dismiss按钮点击时被调用,但辅助视图没有关闭。我已经尝试了dismissViewController 的所有变体都无济于事。

当我使用主视图上的按钮激活相同的 segue 时,一切都按预期进行。我只是不想用一堆按钮弄乱主视图。

任何想法都非常感谢,非常感谢。

【问题讨论】:

  • self.presenting?.dismissViewController(self)这一行执行时,self.presenting的值是多少?
  • @DaveWeston,好问题。使用let x = self.presenting! as NSViewController,应用程序崩溃并出现致命错误:在展开可选值时意外发现 nil。显然没有 viewController 呈现。

标签: swift macos segue


【解决方案1】:

dismissViewController 仅适用于以模态方式呈现的视图控制器(使用Present Modally Segue) 正如this SO question 的回答中所说,您应该关闭由Show Segue 提供的视图控制器,如下所示:

navigationController?.popViewController(animated: true)
dismiss(animated: true, completion: nil)

【讨论】:

  • dismissViewController 适用于以表格形式呈现的视图控制器,并且也可以显示。在这个项目中,没有导航控制器。无论如何,感谢您的意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
  • 2017-03-21
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多