Swift将选择器触发到另一个视图的视图
问题描述:
我有一个底视图和一个顶视图。顶视图具有透明度。当顶视图被解雇时,我想触发一个#selector
。我无法使用viewWillAppear
或viewDidAppear
,因为底部视图仍然可见。如何在底部视图中触发#selector
?有些东西会取代viewWillAppear
?Swift将选择器触发到另一个视图的视图
主视图背后有模糊的视图。我使用self.modalPresentationStyle = .overCurrentContext
来呈现视图。
答
协议是您最佳的解决方案。 首先,你需要这样的方式来创建协议
// MARK: - TopViewController Protocol
protocol TopViewControllerDelegate: NSObjectProtocol {
func topViewWillDismissWith(data: Dictionary<String,String>)
}
在你TopViewController
使TopViewControllerDelegate
财产,当你TopViewController
解雇那个时候你需要调用的委托方法像didTapOnDismissTopView
class TopViewController : UIViewController {
weak var delegate : TopViewControllerDelegate!
// so on...
// MARK: - Action method
func didTapOnDismissTopView() {
var dict = [String : String]()
dict["Amount"] = "$20.00"
dict["ExpireIn"] = "20day"
dict["Location"] = "USA"
dict["message"] = "hello friend this is your Answer"
self.delegate.topViewWillDismissWith(data: dict) //Must write this line
self.dismiss(animated: true, completion: nil)
}
}
现在是时间实施TopViewControllerDelegate
协议BottomViewController
它看起来像
class BottomViewController : UIViewController,TopViewControllerDelegate {
// MARK: - Action method
func didTapOnDisplayTopView() {
let topVC = TopViewController()
topVC.delegate = self
self.present(topVC, animated: true, completion: nil)
}
// MARK: - TopViewControllerDelegate
// This method will call while topViewControllr Will Dismiss.
// if you want to pass data then pass otherwise you can remove perameter from method.
func topViewWillDismissWith(data: Dictionary<String, String>) {
// Do here which you want
}
}
当您在当时出示TopViewController
时,您需要指定delegate
属性。当您的topViewControllr
将在当时解雇topViewWillDismissWith
此方法将调用。 希望它能帮助你。
如果您有描绘布局的图像,这可能会有帮助。 – toddg
@toddg图像被添加 – pprevalon
所以顶视图没有参考底视图?你最好的选择可能是协议委托方法 – toddg