访问容器视图控制器中的父视图按钮
Accessing parent view buttons in container view controller
我在容器视图中有一个集合视图控制器,在父视图中有按钮 - 我需要我的容器视图能够从我的父视图访问按钮出口,以便我可以检测何时单击按钮命令相应地修改我的集合视图(在容器视图中)。
我尝试使用 preparesegue 函数,但无法获得我找到的有效代码。
一种选择是使用 NotificationCenter
,让您的按钮 post 收到通知,并让您的子视图控制器监听它们。
例如,在父级 VC、post 中点击按钮时调用的函数中的通知,如下所示:
@IBAction func buttonTapped(_ sender: UIButton) {
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "ButtonTapped"), object: nil, userInfo: nil)
}
在需要响应按钮点击的子 VC 中,将以下代码放入 viewWillAppear:
以将 VC 设置为该特定通知的侦听器:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(self, selector: #selector(handleButtonTap(_:)), name: NSNotification.Name(rawValue: "ButtonTapped"), object: nil)
}
在同一个视图控制器中,添加上面提到的handleButtonTap:
方法。当"ButtonTapped"通知进来的时候,就会执行这个方法
@objc func handleButtonTap(_ notification: NSNotification) {
//do something when the notification comes in
}
不要忘记在不再需要时将作为观察者的视图控制器移除,如下所示:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
NotificationCenter.default.removeObserver(self)
}
我在容器视图中有一个集合视图控制器,在父视图中有按钮 - 我需要我的容器视图能够从我的父视图访问按钮出口,以便我可以检测何时单击按钮命令相应地修改我的集合视图(在容器视图中)。
我尝试使用 preparesegue 函数,但无法获得我找到的有效代码。
一种选择是使用 NotificationCenter
,让您的按钮 post 收到通知,并让您的子视图控制器监听它们。
例如,在父级 VC、post 中点击按钮时调用的函数中的通知,如下所示:
@IBAction func buttonTapped(_ sender: UIButton) {
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "ButtonTapped"), object: nil, userInfo: nil)
}
在需要响应按钮点击的子 VC 中,将以下代码放入 viewWillAppear:
以将 VC 设置为该特定通知的侦听器:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(self, selector: #selector(handleButtonTap(_:)), name: NSNotification.Name(rawValue: "ButtonTapped"), object: nil)
}
在同一个视图控制器中,添加上面提到的handleButtonTap:
方法。当"ButtonTapped"通知进来的时候,就会执行这个方法
@objc func handleButtonTap(_ notification: NSNotification) {
//do something when the notification comes in
}
不要忘记在不再需要时将作为观察者的视图控制器移除,如下所示:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
NotificationCenter.default.removeObserver(self)
}