我有一个SourceViewController,从中我弹出另一个popUpViewController以选择Dates。在popupViewController上,我有一个Submit按钮,我已将它作为展开按钮连接到SourceViewController。
[当用户单击Submit按钮时,我使用了一个函数来调用api以基于日期和完成时间来收集数据,我将其称为unsegue。
@IBAction func saveClicked(_ sender: UIButton){
getData(fromDate: frmDt, toDate: toDt){(data) in
if data != nil{
self.performSegue(withIdentifier: "unwindsegue", sender: self)
}
}
}
在我的SourceViewController上,我已经有一个segue,可以推送到显示使用api收集的数据的NewViewController。
@IBAction func showNewVC(segue: UIStoryboardSegue){
self.performSegue(withIdentifier: "showNewVC", sender: self)
}
问题是解散segue之后,当我的SourceViewController对newViewController执行segue时,它立即导航到newViewController并返回到sourceViewController。
我不明白为什么会这样发生。我也检查了我的segue。
如果有更好的方法来执行这种弹出日期,那么也很高兴知道。
我建议您查看委托模式。为此,请按照以下步骤操作:
在日期选择器视图控制器中添加以下内容:
protocol datePickerDelegate {
func datePicked(fromDate: frmDt, toDate: toDt)
}
然后将变量添加到类型为datePickerDelegate的日期选择器vc中,如下所示:
var delegate: datePickerDelegate?
现在,当您想离开日期选择器视图控制器时,询问所需的数据并调用我们在上面声明的datePickerDelegate函数:
delegate?.datePicked(fromDate: ...., toDate: ....)
要完成所有这些工作,您需要将源视图控制器添加为日期选择器视图控制器的委托。为此,您需要像下面这样扩展segue方法:
@IBAction func showNewVC(segue: UIStoryboardSegue){
if let vc = segue.destination as? DatePickerViewController (make sure this is the correct class) {
vc.delegate = self
}
self.performSegue(withIdentifier: "showNewVC", sender: self)
}
我不确定这是否行得通,因为我现在无法对其进行编码。但是我建议您查找有关委托模式的一些教程。