【问题标题】:Access Controls of Second View controller from the First Controller第一个控制器对第二个视图控制器的访问控制
【发布时间】:2017-09-19 17:16:19
【问题描述】:

我有一个应用程序,它有一个窗口控制器和两个视图控制器。我创建了一个从主视图控制器中的按钮到第二个视图控制器的 segue;以显示一个模式窗口。

是否可以通过在第一个视图控制器的 .swift 文件中创建一个插座来访问位于第二个视图控制器中的控件。即:来自第一个视图控制器的第二个视图控制器内的访问控制。

【问题讨论】:

  • 这个问题有点不清楚,但从我得到的结果来看,您基本上想将数据从第一个视图控制器传输到第二个视图控制器。这是正确的吗?
  • @TPN1994 是的.. 正确的。
  • 您可以做的是在第二个视图控制器中定义变量,然后在从第一个视图控制器到第二个视图控制器的 segue 上设置这些变量的值,然后第二个视图控制器可以使用它
  • @TPN1994 我已经通过拖放链接了segue。如何通过它传递值?尝试在视图控制器中覆盖...但该功能不存在。
  • 在这里查看这个 SO 线程,它可能不是您想要的逐字逐句,但我相信在阅读了 stackoverflow.com/questions/25215476/… 里面的内容后,很清楚该去哪里@

标签: swift xcode macos


【解决方案1】:

你想达到什么目的? 一般来说 - 没有。视图控制器加载的按钮、标签或视图仅在显示视图控制器的视图时才在范围内(加载到内存中)。

您很少需要在视图显示之前初始化视图控制器并进行方法调用,所以真正的问题是您为什么要这样做。 请记住,它被称为“视图控制器”,即它控制当前的视图对象。 我认为您的设计存在缺陷,因为您想这样做。

【讨论】:

  • 我有一个视图,我要求用户输入。然后我显示第二个视图,它有一个进度面板和东西;这是执行真正处理的地方。目前我只有一个ViewController.Swift File。如果我可以从第二个视图链接控件,例如:进度条我可以在 ViewController.swift 中运行代码并更新第二个视图。我不知道这是否可能。请指教.
  • 如何使用进度面板加载第二个视图。因为如果第二个视图是由 viewController 加载的,你应该可以在 viewController 中引用它。
  • 有一个窗口控制器和两个视图控制器。我在按钮按下时使用 segue 将第一个视图控制器链接到第二个视图控制器。
  • 要在两个视图控制器之间正确通信,您需要两个部分。
【解决方案2】:

假设加载第二个视图控制器时第一个视图控制器没有被破坏(即第二个是弹出窗口):

要在两个视图控制器之间正确通信,您需要两个部分。

执行 segue 时,您需要将设置参数传递给第二个视图控制器。 https://developer.apple.com/documentation/appkit/nssegueperforming 为了与第一个视图控制器进行通信,您需要实现一个委托。即第二个视图控制器将工作委托给第一个: https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html - 查看委托部分。

【讨论】:

  • 另外,您可以通过放入新视图(不是新视图控制器的视图)以编程方式在第一个视图控制器中加载进度视图。然后进度面板在第一个视图控制器的范围内。
  • 通过 View 是指 Box 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多