将数据传递回上一个控制器

时间:2012-01-02 23:12:45

标签: objective-c ios5 controller storyboard

故事板中有两个控制器,嵌入在NavigationController中,并且有一个segue可以在这些控制器之间切换。

通过实现prepareForSegue,将数据从第一个控制器传递到第二个控制器非常简单,并使用segue.destinationViewController设置第二个控制器的属性。

我应该将数据传回第二个控制器到前一个控制器。我用Google搜索,但我没有找到任何简单但有效的代码来演示它。

你会如此善良地给我一个关于最佳方法的简单样本吗?

提前致谢!

4 个答案:

答案 0 :(得分:24)

在第二个视图控制器类中,您可以创建协议和委托。第一个视图控制器将自己设置为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

答案 1 :(得分:3)

当您设置传递给第二个控制器的数据时,您也可以设置指向前一个控制器的数据。

答案 2 :(得分:2)

执行此操作的“推荐”方法是使用委托。让第一个视图控制器在-prepareForSegue:调用期间将自身设置为新视图控制器的委托,然后在完成后,调用您定义的任何委托方法。

这比紧耦合两个控制器要多得多,但如果你发现需要以稍微不同的方式使用控制器,它实际上可以节省时间。如果您使用IB和Storyboard观看WWDC'11视频,他们实际上会深入研究这种模式并包含代码示例和演示,因此我建议您查看。

答案 3 :(得分:0)

我一直在研究如何将数据从一个视图控制器传递到另一个视图控制器的所有变体,并且已经看到Apple的第二个iOS应用程序教程不仅包含代码,还包含对所涉及的所有内容的可爱解释。