来自父视图控制器的子视图实例的调用函数

时间:2018-09-12 16:25:44

标签: ios swift childviewcontroller parentviewcontroller

我有一个由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
        }
    }
}

在我的motherView中有一个按钮。触摸此按钮时,它将在motherViewController上调用一个动作。

@IBAction func cancelButtonTapped(_ sender: UIBarButtonItem) {

       //call clean method of containerView instance

}

如何通过此操作在特定childView实例上调用cleanTableView函数?

2 个答案:

答案 0 :(得分:0)

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

@IBAction func cancelButtonTapped(_ sender: UIBarButtonItem) {
    (children.first as? ChildViewController)?.clean()
}

有关API更改/重命名的一些其他信息:

在Swift 4.2中,childViewControllers属性已重命名为children。参见https://developer.apple.com/documentation/uikit/uiviewcontroller/1621452-children?changes=latest_minor

renaming1 renaming2

答案 1 :(得分:0)

有多种方法可以执行此操作,具体取决于组件的互连性以及绑定的紧密程度。三个例子:

  • 紧密绑定:“母亲” VC在“子” VC上调用方法,在子VC上调用方法。

  • 与委托的宽松绑定:创建委托协议,通过此委托将子View与母VC链接。然后,母VC会呼叫代表。

  • 与通知断开连接:让子级View侦听特定的“清除”通知。让VC妈妈发布该通知。两者之间没有直接链接。

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