2016-12-14 87 views
0

我有一个底视图和一个顶视图。顶视图具有透明度。当顶视图被解雇时,我想触发一个#selector。我无法使用viewWillAppearviewDidAppear,因为底部视图仍然可见。如何在底部视图中触发#selector?有些东西会取代viewWillAppearSwift将选择器触发到另一个视图的视图

主视图背后有模糊的视图。我使用self.modalPresentationStyle = .overCurrentContext来呈现视图。

image

+0

如果您有描绘布局的图像,这可能会有帮助。 – toddg

+0

@toddg图像被添加 – pprevalon

+1

所以顶视图没有参考底视图?你最好的选择可能是协议委托方法 – toddg

回答

1

协议是您最佳的解决方案。 首先,你需要这样的方式来创建协议

// 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此方法将调用。 希望它能帮助你。

+0

我认为你的底层viewController的代码可能有错误。 'topViewWillDismiss'不会被调用。该代表被添加到班级中,并且还加入了“自我”。当顶视图退出数据不会通过。 – pprevalon

+0

你写了这行 self.delegate.topViewWillDismissWith(data:dict)//当topviewDismiss时必须写这行 ? –

+0

我在设置委托时调用了错误的选择器。它现在工作完美谢谢你的帮助朋友 – pprevalon

相关问题