通过2个模态segues传递一个字符串

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

我一直在努力实现协议和委托的例子。

我的MainVC对CategoryVC有模态搜索,但是CategoryVC将用户发送到DetailVC。

我需要将MainVC设置为DetailVC的委托,但是当MainVC实例化DetailVC时,我可以找到的所有示例都将MainVC设置为DetailVC的委托。我的DetailVC未由MainVC实例化。

我想完成

detailVC.delegate = self

但是因为我正在使用Interface Builder Modal Segues,所以我不知道如何引用该对象。

编辑:MainVC有一个正在编辑的图像和添加叠加的功能CategoryVC具有叠加类别DetailVC有一个UICollectionView显示所有叠加可供选择

我希望DetailVC传递给MainVC,它覆盖以添加到图像

ios swift
2个回答
1
投票

所以顺序是MainVC(模态segue) - > CategoryVC(模态segue) - > DetailVC

听起来CategoryVC需要将有关mainVC的信息转发给DetailVC。

你可以给CategoryVC一个属性theMainVC,用来记住MainVC。

所以在MainVC的prepareForSegue:

func prepare(for segue: UIStoryboardSegue, sender: Any?) {
   if let theCategoryVC = segue.destination as? CategoryVC {
     theCategoryVC.theMainVC = self
   }
}

然后在你的CategoryVC

var theMainVC: MainVC?

func prepare(for segue: UIStoryboardSegue, sender: Any?) {
   if let theDetailVC = segue.destination as? DetailVC {
     theDetailVC.delegate = theMainVC
   }
}

1
投票

您当前的问题有很多解决方案

1-连锁代表

protocol MYDataSender {
   func myDele(str:String)
} 
class MainVC:UIViewController,MYDataSender{

  func myDele(str:String) { print(str) }
}

当存在C类

let cat = ///
cat.delegate = self // if you don't use self.present(vc ,,, then it would be inside prepareForSegue

class CategoryVC:UIViewController{
   var delegate:MYDataSender!
}

当存在DetailsVC

let det = //
det.delegete = delegate // rhs is CategoryVC'sdelegete = MainVC , if you don't use self.present(vc ,,, then it would be inside prepareForSegue

class DetailsVC:UIViewController{
   var delegate:MYDataSender!
   func send() {
     delegate.myDele(str:"sendToMain")
   }
}

2- NotificationCenter //最简单的

3-共享单身人士

4-存储数据

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