如何将值传递给父视图控制器?

可能重复:
dismissModalViewController并传回数据

我是新来的ios开发,并坚持在这个问题上:

我正在使用故事板,并有一个导航控制器vcA ,其中有一个TableView ,它显示来自MutableArray (在相同类的viewdidload中初始化)的一些数据。 select任何单元格后,会显示第二个视图控制器vcB ,其中包含一个TextField和一个名为“添加到列表”的button。

我想要的是,当我在TextFieldinput一些文本,然后按下“添加到列表”button,文本应该被添加到前一个视图的数组(显示在TableView ),当我点击“后退”button在vcB的导航栏上, vcA应该显示更新后的TableView (列表顶部)。 基本上我想从vcBTextField添加文本到vcB的数组,并在点击返回button后显示新的数组。

我已经搜寻了很多关于这个问题,似乎发现委托和协议是达到预期的结果的方式,但我无法理解委托。

在这个例子中,我有第二个视图控制器呈现为模态:

在第二个视图控制器h文件中:

 @protocol SecondViewControllerDelegate <NSObject> - (void)addItemViewController:(id)controller didFinishEnteringItem:(NSString *)item; @end @interface SecondPageViewController : UIViewController <UITextViewDelegate> { NSString *previouslyTypedInformation; } @property (weak, nonatomic) IBOutlet UITextView *textView; @property (nonatomic) NSString *previouslyTypedInformation; @property (nonatomic, weak) id <SecondViewControllerDelegate> delegate; 

在第二个视图控制器m文件确保合成属性并添加然后添加:

 - (IBAction)done:(id)sender { NSString *itemToPassBack = self.textView.text; NSLog(@"returning: %@",itemToPassBack); [self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack]; //dismiss modal view controller here } 

然后在第一个视图控制器h文件将其设置为委托:

  @interface FirstPageViewController: UIViewController <SecondViewControllerDelegate> @property (nonatomic) NSString *returnedItem; 

然后在第一个视图控制器的m文件中合成并添加方法:

 - (void)addItemViewController:(SecondPageViewController *)controller didFinishEnteringItem: (NSString *)item { //using delegate method, get data back from second page view controller and set it to property declared in here NSLog(@"This was returned from secondPageViewController: %@",item); self.returnedItem=item; //add item to array here and call reload } 

现在你已经有了什么回报的文字! 您可以将string添加到您的数组在第一个视图控制器的viewDidLoad和调用

 [self.tableView reloadData]; 

它应该工作。