我有一个由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函数?
答案 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
答案 1 :(得分:0)
有多种方法可以执行此操作,具体取决于组件的互连性以及绑定的紧密程度。三个例子:
紧密绑定:“母亲” VC在“子” VC上调用方法,在子VC上调用方法。
与委托的宽松绑定:创建委托协议,通过此委托将子View与母VC链接。然后,母VC会呼叫代表。
与通知断开连接:让子级View侦听特定的“清除”通知。让VC妈妈发布该通知。两者之间没有直接链接。
每种方法的优缺点。最好的互动方式取决于您的具体情况。