gpt4 book ai didi

ios - 如何使用委托(delegate)将变量传递给另一个 View Controller

转载 作者:行者123 更新时间:2023-11-28 21:13:43 25 4
gpt4 key购买 nike

我需要使用委托(delegate)快速将变量发送到另一个 View Controller 。

我有 2 个 View Controller :ViewControllerOne 和 ViewControllerTwoViewControllerOne 中的一个按钮使用 segue(show) 链接到 ViewControllerTwo从 ViewControllerOne 传递到 ViewControllerTwo 的变量。

有人能告诉我我需要在每个 View Controller 的类中编写代码以将变量发送到 ViewControllerTwo 吗?(我是初学者,如果你能给我解释一下它是如何工作的,我将不胜感激)

我知道我可以使用 segue 发送它,但我需要通过委托(delegate)发送它。

谢谢

最佳答案

我认为您误解了何时使用委托(delegate)来传递数据。

这不像有 2 种方法(通过 prepareForSegue 或通过委托(delegate))可供您选择,只要您希望将数据从 1 个 VC 传递到另一个。这两种方法应在适当的情况下适当使用。

通过 prepareForSegue 传递数据通常在数据从呈现另一个 VC 的 VC 到呈现的 VC 时使用。例如,当用户点击表 VC 中的一个单元格时,表 VC 可以将用户点击的任何项目传递给下一个 VC,显示所点击项目的详细信息。使用此方法传递数据的前提是segue必须连接数据发送方和数据接收方。

通过委托(delegate)传递数据是相反的方式。它通常在数据从呈现的 VC 传递到呈现它的 VC 时使用。例如,您有一个显示 UIImagePickerController 的 VC。 UIImagePickerController 有一个委托(delegate),将用户选择的照片/视频传递给您的 VC。此方法要求数据接收方在某个时刻具有数据发送方的实例。这样接收方就可以将自己设置为发送方的委托(delegate)。

现在,让我们看看您的情况。使用prepareForSegue 传递数据是您最好的选择,因为:

  • VC1 介绍 VC2
  • 您想将数据从 VC1 传递到 VC2
  • 有一个 segue 连接 VC

在这里通过委托(delegate)传递数据是毫无意义的。我将向您展示如何操作,然后您就会明白为什么。

这是委托(delegate):

protocol ViewControllerOneDelegate {
func acceptData(someInt: Int)
}

现在给您的 VC2 一个 Storyboard ID。在 VC1 中添加一个名为 delegate 的属性。使 VC2 符合委托(delegate):

class ViewControllerOne: UIViewController, ViewControllerTwoDelegate {
// implement acceptData however you like, doesn't matter
}

当你想展示 VC2 时,这样做:

let sb = UIStoryboard(name: "Main", bundle: Bundle.main)
let vc2 = sb.instantiateViewController(withIdentifier: "Your Identifier") as! ViewControllerTwo
self.delegate = vc2

现在您已准备好传递数据,在下一行:

self.delegate.acceptData(someInt: 10)

现在你看到这里有什么问题了吗?这两行:

self.delegate = vc2
self.delegate.acceptData(someInt: 10)

为什么不一起摆脱委托(delegate)并做:

vc2.acceptData(someInt: 10)

你真的不需要在这里使用委托(delegate)。直接把数据赋给VC2中的变量或者调用VC2中的方法什么的就行了。你有 VC2 实例就在那里!因此,只需将数据传递给它即可!

关于ios - 如何使用委托(delegate)将变量传递给另一个 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42185475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com