Swift - 将数据从子视图传递到父视图

Posted

技术标签:

【中文标题】Swift - 将数据从子视图传递到父视图【英文标题】:Swift - Pass data from Child View to Parent View 【发布时间】:2020-12-04 06:43:46 【问题描述】:

我想将我的数据从子视图控制器传递到父视图控制器。

我只是将子视图移动到父视图的顶部,这是我的代码:

let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let toChildView = storyBoard.instantiateViewController(identifier: "toChildView")
                        
// show child view
self.addChild(toChildView)
toChildView.willMove(toParent: self)
toChildView.view.frame = self.view.bounds
self.view.addSubview(toChildView.view)
toChildView.didMove(toParent: self)

这是代表:

protocol DataDelegate 
    func printTextField(string: String)

我将变量委托添加到我的子视图

var delegate: DataDelegate?

并将数据发送到父视图

@IBAction func btnSend(_ sender: Any) 
    delegate?.printTextField(string: textField.text)

并关闭子视图,例如:

@IBAction func btnClose(_ sender: Any) 
    // back to parent view
    self.willMove(toParent: nil)
    self.view.removeFromSuperview()
    self.removeFromParent()

调用 DataDelegate 到父视图

class ParentView: UIViewController, DataDelegate 
    func printTextField(string: String) 
        print(string)
    

我打算将我的文本字段的数据从子视图传递到父视图,我尝试以下代码: https://jamesrochabrun.medium.com/implementing-delegates-in-swift-step-by-step-d3211cbac3ef https://www.youtube.com/watch?v=aAmvQU9HccA&t=438s

但它没有用,任何帮助谢谢:)

已编辑:添加了我的委托实现代码...

【问题讨论】:

Delegate 是满足您要求的好方法。因此,在您提供的教程链接中实施时,您可能会错过一些东西。如果您在这里向我们展示您的委托实现代码会更好。 我编辑我的代码。 这能回答你的问题吗? How to pass data from child to parent view controller? in swift 【参考方案1】:

因此,根据您已完成声明但未初始化委托的代码。因此,转到您的 ParentView 并在 viewDidLoad 或您准备移动孩子的函数中分配委托,例如:-

toChildView.delegate = self
 

然后再试一次。 :-)

【讨论】:

当我尝试代码时出现错误,它说“'UIViewController' 类型的值没有成员'delegate'” 您必须先进行类型转换,例如:- 在问题中-> 用下面的行替换第二行。 let storyboard = UIStoryboard(name: "Main", bundle: nil) if let toChildView= storyboard.instantiateViewController(withIdentifier: "toChildView") as? toChildView toChildView.delegate = self 总是养成给 ViewControllers 命名的习惯,就像在你的情况下它必须是 - ToChildViewController 和 ParentViewController。因为在 swift View 和 ViewController 中都是不同的。【参考方案2】:

您不会在父视图中获得委托属性,因为它是 childView 的成员。您可以执行以下操作

self.addChild(toChildView)
toChildView.delegate = self

【讨论】:

以上是关于Swift - 将数据从子视图传递到父视图的主要内容,如果未能解决你的问题,请参考以下文章

将点击从子视图转发到父视图?

将图像从子视图绘制到父视图

不会从子视图控制器弹出到父视图

在 Cocoa,UIResponder 中将消息从子视图发送到父视图?

通过 uinavigationcontroller 将变量从父视图传递到子视图

将数据从局部视图传递到父视图