试试这个传回数据:
要将数据从 ViewControllerB 传递回 ViewControllerA,您需要使用协议和委托。
为此,我们将使 ViewControllerA 成为 ViewControllerB 的委托,这允许 ViewControllerB 将消息发送回 ViewControllerA,从而使我们能够发送回数据。
要让 ViewControllerA 成为 ViewControllerB 的委托,它必须符合我们必须指定的 ViewControllerB 协议。这告诉 ViewControllerA 它必须实现哪些方法。
1) 在 ViewControllerB.h 中 #import 下方但 @interface 上方您指定协议。
@protocol ViewControllerBDelegate <NSObject>
- (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString *)item;
@end
2) 接下来仍然在 ViewControllerB.h 中,您需要设置委托属性并在 ViewControllerB.m 中合成
@property (nonatomic, weak) id <ViewControllerBDelegate> delegate;
3) 在 ViewControllerB 中,当我们弹出视图控制器时,我们会在委托上调用一条消息。
NSString *itemToPassBack = @"Pass this value back to ViewControllerA";
[self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack];
4) ViewControllerB 就是这样,现在在 ViewControllerA.h 中告诉 ViewControllerA 导入 ViewControllerB 并符合其协议。
#import "ViewControllerB.h"
@interface ViewControllerA : UIViewController <ViewControllerBDelegate>
5) 在 ViewControllerA.m 中从我们的协议中实现以下方法
- (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString *)item
{
NSLog(@"This was returned from ViewControllerB %@",item);
}
6) 在我们将 ViewControllerB 推送到导航堆栈之前,我们需要做的最后一件事是告诉 ViewControllerB ViewControllerA 是它的委托。
ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib=@"ViewControllerB" bundle=nil];
viewControllerB.delegate = self
[self pushViewController:viewControllerB animated:YES];