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

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

最好的解释方式是我的firstViewController有一个“添加”按钮,可以打开secondViewController。这个viewController有两个文本字段,您可以在其中编写内容(我希望将在这两个文本框中编写的内容显示在第一个viewController上),然后按完成后,secondViewController将关闭,而您又回到了firstViewController上。

这是我正在使用的代码:
(在secondViewController中)

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


显然,labeltext是firstviewcontroller中的一个标签,用于显示secondViewController中这些文本字段中写入的内容。

问题是,当我使用情节提要并仅将“完成”按钮拖动到firstViewController时,它将在新窗口中使用新数据/更新的labeltext打开firstViewController。我希望secondViewController在我按下“完成”时关闭,并且更新的标签显示在firstViewController上,而无需在新窗口中打开它。

这有点难以解释,因此,如果您需要更多详细信息进行澄清,我将非常乐意提供!

提前致谢!

最佳答案

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

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

@IBAction func unwindToFirstViewController (sender: UIStoryboardSegue) {
}


编写完成后,现在可以在情节提要中将Control+drag按钮Done移至Exit中的secondViewController项,如下所示:

swift - Swift:将数据传递到PreviousViewController而不在新窗口中打开viewController-LMLPHP

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

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

关于swift - Swift:将数据传递到PreviousViewController而不在新窗口中打开viewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40367139/

10-10 21:07