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

hyd*_*d00 5 iphone xcode objective-c storyboard ios

可能重复:
dismissModalViewController并传回数据

我是ios开发的新手并坚持这个问题:

我正在使用故事板并且有一个导航控制器,vcA其中有一个TableView显示来自a的一些数据MutableArray(viewdidload在同一个类中初始化).选择任何单元格后vcB,会显示第二个视图控制器,其中包含一个TextField名为"添加到列表"的按钮.

我要的是,当我进入的一些文字TextField,然后按下"添加到列表"按钮上的文字应该被添加到一个视图的数组(获取所示TableView),当我点击"后退"按钮vcB" s导航栏,vcA应显示更新TableView后的新条目(在列表顶部).基本上我想将文本从vcB's 添加TextField到数组中vcA并在单击BACK按钮后显示新数组.

我已经搜索了很多关于这个问题的内容,并且似乎发现委托和协议是实现预期结果的方法,但是我无法理解委托.

gg1*_*g13 13

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

在第二个视图控制器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;
Run Code Online (Sandbox Code Playgroud)

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

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

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

 @interface FirstPageViewController: UIViewController <SecondViewControllerDelegate>
 @property (nonatomic) NSString *returnedItem;
Run Code Online (Sandbox Code Playgroud)

然后在第一个视图控制器的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
}
Run Code Online (Sandbox Code Playgroud)

现在你有了返回内容的文字!您可以在第一个视图控制器的viewDidLoad中将字符串添加到数组中并调用

[self.tableView reloadData]; 
Run Code Online (Sandbox Code Playgroud)

它应该工作.