如何通过来自同一个 TableViewController 的多个 segue 到同一个 ViewController
Posted
技术标签:
【中文标题】如何通过来自同一个 TableViewController 的多个 segue 到同一个 ViewController【英文标题】:How to Segue to the same ViewController via multiple segues from the same TableViewController 【发布时间】:2012-07-20 23:13:40 【问题描述】:我有一个静态 TableViewController,它有两个静态单元:一个出发机场和一个到达机场。两者都连接到另一个 TableViewController,它允许用户选择一个机场,并将原始 TVC 定义为将对象传回的委托。我不知道如何确定选择机场时正在设置的属性;选择通过代表传回时的出发或到达机场。我开始实现的是 AirportListTVC 上的一个属性,该属性通过 prepareForSegue 方法设置,然后在进行选择时传递回委托。有没有更好的办法?
【问题讨论】:
【参考方案1】:向新的 UIViewController 传递信息通常很棘手 - 并且使用 Interface Builder 中的自动 segues 并不能真正让您轻松传递信息。基本上我会建议两种方法(听起来你正在使用一种):
1) 使用 Interface Builder segues 并使用 prepareForSegue 将您拥有的任何信息传递给新的 UIViewController。
2) 在 Interface Builder(标识符)中命名 UIViewController,然后使用instantiateViewControllerWithIdentifier
自己呈现它,如下所示 - 在这种情况下使用导航控制器呈现:
UIStoryboard *storyboard = [viewController storyboard];
MyViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"MyVC"];
[vc configureWithMyData:myData];
[navigationController pushViewController:vc animated:YES];
这是一个选择适合你的案例。显然你也可以完全在代码中创建控制器。
这里有一些事情需要考虑 - 例如,这两种方法会导致新的 UIViewController 在不同点被实际初始化/viewDidLoad(如果有帮助,我可以对此进行扩展)。
【讨论】:
感谢您的回复。我实际上在执行 segue 和设置属性时没有问题。我想不通的是如何确定从 Master 到 Detail TVC 执行了哪个 segue,以便当 Detail TVC 将选择的值传递回 Master 时,我知道要设置哪个属性。我正在使用 CoreData 并共享一个托管对象上下文,如果这有助于我对如何实现这一点有不同的看法。现在我正在 Detail TVC 上设置一个属性,以便我知道执行了哪个 segue 并将其与 Detail TVC 上选择的值一起传回。 您使用的是 MVC 设计模式吗? Detail TVC 更新模型,关闭,然后 Master VC 在模型重新出现时从模型中检索更新的信息。如果你在谈论两个信息,你可能只是更新视图...... 我正在使用 MVC 设计模式。在 MasterTVC 上,我在 MOC 中创建一个对象。然后我继续使用 DetailTVC 并且 DetailTVC 正在指定 Master TVC 作为它的委托,以将所选对象传递给以便可以将其保存到 MOC 中。我应该将指向 MasterTVC 中创建的对象的指针传递给 DetailTVC 并直接从 DetailTVC 更新模型吗? 这很难说,但听起来更好。以上是关于如何通过来自同一个 TableViewController 的多个 segue 到同一个 ViewController的主要内容,如果未能解决你的问题,请参考以下文章
如何通过来自同一个 TableViewController 的多个 segue 到同一个 ViewController
如何通过 Debezium Connect 反序列化来自 Kafka 消息流的几何字段?