【发布时间】:2013-10-24 02:52:13
【问题描述】:
从 iOS 6 开始,可以使用展开转场来向上导航场景层次结构。我正在尝试决定将数据传递给父视图控制器的更清洁/更好/首选/更可维护的方法。有一些问题可以从技术角度解决这个问题(例如,“如果我有一个放松,我还需要一个代表吗”),但我找不到很多可以解决利弊的问题。
选项 1:使用委托。
- 通过将父视图控制器作为遵守协议的委托传入来完成。
- 子调用协议方法返回数据。
- 如果 Parent 需要数据验证,则需要返回 value/dict 以允许 child 处理错误。
- 开销:父级中的协议定义和一种方法(用于数据验证和接收)。
选项 2:使用展开转场
- 通过调用 child 的 unwind segue 来完成。
- 儿童通过将按钮或情节提要本身拖到
Exit并命名该segue 以使其可以与performSegueWithIdentifier:sender一起在其场景中添加一个segue - 父级实现
returnFromSegueName(链接到该segue的用户命名方法)以从子级获取数据。 - 虽然只能通过同时实现
canPerformUnwindSegueAction:fromViewController:withSender来实现数据验证- 数据验证失败将需要 Child 上的另一个属性,因为此方法只接受 BOOL 作为返回值。
- 儿童通过将按钮或情节提要本身拖到
- 开销:两种方法,一个额外的属性,以及 Storyboard 恶作剧。
总体而言,代表们感觉要走的路更干净,但也可能过时了。我偏向那个方向是错的吗?
【问题讨论】:
标签: ios objective-c delegates segue