【问题标题】:Swift: Passing data to a previousViewController without opening the viewController in a new windowSwift:将数据传递给previousViewController而不在新窗口中打开viewController
【发布时间】:2016-11-01 19:18:12
【问题描述】:

所以我正在开发一个应用程序,同时也在学习 swift。我已经弄清楚如何将数据从 secondViewController 发送到 firstViewController。基本上我已经将“完成”按钮链接到 firstViewController,所以当我按下“完成”时,它会打开第一个 viewController 的新窗口并提供我传递的数据。

但是,我正在寻找一种方法来更新 firstViewController,而无需使用不同的 segue 打开它的另一个窗口。

最好的解释方法是我的 firstViewController 有一个“添加”按钮,可以打开 secondViewController。这个 viewController 有两个文本字段,你在里面写东西(我想让这两个文本框中写的东西出现在第一个 viewController 上)然后当你按下完成时,第二个 ViewController 消失,你又回到了 firstViewController。

这是我正在使用的代码: (在第二个ViewController中)

override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
var destinationviewcontroller : ViewController = segue.destinationController as! ViewController
    destinationviewcontroller.LabelText = weblinklabel.stringValue
    }

显然labeltext 是第一个视图控制器中的一个标签,它显示了在第二个视图控制器的那些文本字段中写入的内容。

问题是当我使用情节提要并简单地从“完成”按钮拖动到 firstViewController 时,它会在新窗口中打开 firstViewController 并使用新数据/更新 labeltext。我希望 secondViewController 在我按下“完成”时关闭,并且更新的标签会出现在 firstViewController 上,而不会在新窗口中打开。

这有点难以解释,所以如果您需要更多细节来澄清,我将非常乐意提供!

提前致谢!

【问题讨论】:

标签: swift macos segue viewcontroller


【解决方案1】:

是的,您应该使用 unwind Segues as stated here

首先,在你的firstViewController 中添加一个空的IBAction 方法(注意你应该直接写):

@IBAction func unwindToFirstViewController (sender: UIStoryboardSegue) {
}

一旦编写完成,现在您可以在故事板中将Control+drag Done 按钮指向secondViewController 中的Exit 项目,如下所示:

它应该弹出新的IBAction 方法来处理展开,现在只需实现它:

@IBAction func unwindToFirstViewController (sender: UIStoryboardSegue) {
    if let sourceViewController = sender.source as? SecondViewController {
        // update whatever values you want
        // to update in firstViewController from secondViewController
    }
}

【讨论】:

  • 我在情节提要中没有Exit 项目,因为我认为我正在制作一个可可应用程序而不是iOS 应用程序。我认为您提到的 unwindsegue 方法适用于 iOS 应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 2013-11-11
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
相关资源
最近更新 更多