【问题标题】:Pass data back to the previous controller将数据传回前一个控制器
【发布时间】:2012-02-01 03:20:41
【问题描述】:
我在故事板中有两个控制器,嵌入在 NavigationController 中,并且有一个 segue 可以在它们之间切换。
通过实现 prepareForSegue 将数据从第一个控制器传递到第二个控制器非常简单,并使用 segue.destinationViewController 设置第二个控制器的属性。
我也应该将数据从第二个控制器传回到前一个控制器。我用谷歌搜索,但我没有找到任何简单但有效的代码来演示它。
您能不能给我一个简单的示例,说明最好的方法?
提前致谢!
【问题讨论】:
标签:
objective-c
ios5
controller
storyboard
【解决方案1】:
我一直在研究如何将数据从一个视图控制器传递到另一个视图控制器这一问题的所有变体,并发现 Apple 的第二个 iOS 应用程序教程不仅包含代码,而且对所涉及的所有内容都有很好的解释。
【解决方案2】:
在您的第二个视图控制器类中,您创建一个协议和委托。第一个视图控制器将自己设置为 prepareForSegue 中的委托并实现协议方法。然后,第二个视图控制器将调用方法将数据传回第一个视图控制器。以下是我的一个项目中的一些代码作为示例。
@protocol TableSelectorDelegate <NSObject>
@optional
- (void)didMakeSelection:(id)selectionString forType:(NSString *)dataTitle;
- (void)didAddNewValue:(NSString *)newValue forType:(NSString *)dataTitle;
@end
@interface TableSelectorViewController : UITableViewController
@property (nonatomic, weak) id<TableSelectorDelegate> delegate;
@end
【解决方案3】:
当您设置要传递给第二个控制器的数据时,您还可以设置指向前一个控制器的指针。
【解决方案4】:
执行此操作的“推荐”方式是使用委托。在-prepareForSegue: 调用期间让第一个视图控制器将自己设置为新视图控制器的委托,然后在完成后调用您定义的任何委托方法。
这比紧密耦合两个控制器要多一些工作,但如果您发现需要以稍微不同的方式使用控制器,它实际上可以节省时间。如果您观看关于使用 IB 和 Storyboards 的 WWDC'11 视频,他们实际上会深入了解此模式并包含代码示例和演示,因此我建议您看一看。