从父视图控制器调用子视图实例的函数
Call function of child view instance from parent view controller
我有一个由 motherViewController 控制的 motherView,其中有一个容器视图。容器视图由 childViewController 控制。 childView 包含一个 tableView。
现在我在 childViewController 中有一个 cleanTableView 函数,"resets" 调用 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 函数?
假设只有一个子视图控制器:
@IBAction func cancelButtonTapped(_ sender: UIBarButtonItem) {
(children.first as? ChildViewController)?.clean()
}
关于 API 更改/重命名的一些附加信息:
childViewControllers
属性 在 Swift 4.2 中已重命名为 children
。参见 https://developer.apple.com/documentation/uikit/uiviewcontroller/1621452-children?changes=latest_minor
有很多方法可以做到这一点,具体取决于组件的互连性以及您希望将它们绑定的紧密程度。三个例子:
紧绑定:"mother"VC调用"child"VC的方法,VC调用子View的方法。
与委托的松散绑定:创建委托协议,link 子视图与母视图 VC 通过此委托。妈妈VC接着给委托打电话
与通知断开连接:让子视图监听特定的 "clear" 通知。有母亲 VC post 那个通知。两者之间没有直接的 links。
每种方法的优缺点。最佳互动取决于您的具体情况。
我有一个由 motherViewController 控制的 motherView,其中有一个容器视图。容器视图由 childViewController 控制。 childView 包含一个 tableView。
现在我在 childViewController 中有一个 cleanTableView 函数,"resets" 调用 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 函数?
假设只有一个子视图控制器:
@IBAction func cancelButtonTapped(_ sender: UIBarButtonItem) {
(children.first as? ChildViewController)?.clean()
}
关于 API 更改/重命名的一些附加信息:
childViewControllers
属性 在 Swift 4.2 中已重命名为 children
。参见 https://developer.apple.com/documentation/uikit/uiviewcontroller/1621452-children?changes=latest_minor
有很多方法可以做到这一点,具体取决于组件的互连性以及您希望将它们绑定的紧密程度。三个例子:
紧绑定:"mother"VC调用"child"VC的方法,VC调用子View的方法。
与委托的松散绑定:创建委托协议,link 子视图与母视图 VC 通过此委托。妈妈VC接着给委托打电话
与通知断开连接:让子视图监听特定的 "clear" 通知。有母亲 VC post 那个通知。两者之间没有直接的 links。
每种方法的优缺点。最佳互动取决于您的具体情况。