Ios 从父视图控制器调用子视图实例的函数

Ios 从父视图控制器调用子视图实例的函数,ios,swift,childviewcontroller,parentviewcontroller,Ios,Swift,Childviewcontroller,Parentviewcontroller,我有一个由motherViewController控制的motherView,其中包含一个容器视图。容器视图由childViewController控制。childView包含一个tableView 现在我在childViewController中有了一个cleanTableView函数,它在调用时“重置”tableView func clean() { let indexPath = IndexPath(row: 0, section: 0) if let cell = tab

我有一个由motherViewController控制的motherView,其中包含一个容器视图。容器视图由childViewController控制。childView包含一个tableView

现在我在childViewController中有了一个cleanTableView函数,它在调用时“重置”tableView

func clean() {
    let indexPath = IndexPath(row: 0, section: 0)
    if let cell = tableView.cellForRow(at: indexPath) {
        if cell.accessoryType == .checkmark {
            cell.accessoryType = .none
        }
    }
}
在我的母亲视图中有一个按钮。当按下此按钮时,它将调用motherViewController上的操作

@IBAction func cancelButtonTapped(_ sender: UIBarButtonItem) {

       //call clean method of containerView instance

}

如何在此操作中调用特定childView实例上的cleanTableView函数

假设只有一个子视图控制器:

@IBAction func cancelButtonTapped(_ sender: UIBarButtonItem) {
    (children.first as? ChildViewController)?.clean()
}
有关API更改/重命名的一些附加信息:

在Swift 4.2中,
childViewController
属性已重命名为
children
。看


假设只有一个子视图控制器:

@IBAction func cancelButtonTapped(_ sender: UIBarButtonItem) {
    (children.first as? ChildViewController)?.clean()
}
有关API更改/重命名的一些附加信息:

在Swift 4.2中,
childViewController
属性已重命名为
children
。看


根据组件的互连性以及您希望将它们绑定的紧密程度,有很多方法可以做到这一点。三个例子:

  • 紧密绑定:“母”VC调用“子”VC上的方法,后者调用子视图上的方法

  • 与委托的松散绑定:创建委托协议,通过此委托将子视图链接到母VC。然后,母VC调用代理

  • 与通知断开连接:让子视图侦听特定的“清除”通知。让母公司VC发布通知。两者之间没有直接联系


每种方法的优缺点。最好的交互取决于您的具体情况。

有很多方法可以做到这一点,这取决于组件的互连性以及您希望将它们绑定的紧密程度。三个例子:

  • 紧密绑定:“母”VC调用“子”VC上的方法,后者调用子视图上的方法

  • 与委托的松散绑定:创建委托协议,通过此委托将子视图链接到母VC。然后,母VC调用代理

  • 与通知断开连接:让子视图侦听特定的“清除”通知。让母公司VC发布通知。两者之间没有直接联系


每种方法的优缺点。最佳交互取决于您的具体情况。

您可以设置NSNotificationCenter观察者或同时声明协议。您可以设置NSNotificationCenter观察者或同时声明协议。
子项
是否为Swift 4.2?这听起来像是对基础类的改变,而不是对语言的改变。你能解释一下吗?iOS 12的变化是这样吗?@邓肯看起来确实是一个快速的4.2具体改变(检查附加屏幕截图)。这听起来像是对各种功能和属性的快速名称的基础改变。在Swift 2->Swift 3的转换中也有很多这样的变化。成功了!谢谢<代码>儿童是Swift 4.2吗?这听起来像是对基础类的改变,而不是对语言的改变。你能解释一下吗?iOS 12的变化是这样吗?@邓肯看起来确实是一个快速的4.2具体改变(检查附加屏幕截图)。这听起来像是对各种功能和属性的快速名称的基础改变。在Swift 2->Swift 3的转换中也有很多这样的变化。成功了!谢谢