在iOS Swift中从popUpVC导航到newVC

问题描述 投票:0回答:1

我有一个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。

如果有更好的方法来执行这种弹出日期,那么也很高兴知道。

ios swift segue uipopovercontroller unwind-segue
1个回答
0
投票

我建议您查看委托模式。为此,请按照以下步骤操作:

在日期选择器视图控制器中添加以下内容:

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)
}

我不确定这是否行得通,因为我现在无法对其进行编码。但是我建议您查找有关委托模式的一些教程。

© www.soinside.com 2019 - 2024. All rights reserved.