データを戻すためにこれを試してください:
ViewControllerB から ViewControllerA にデータを戻すには、プロトコルとデリゲートを使用する必要があります。
これを行うには、ViewControllerA を ViewControllerB のデリゲートにします。これにより、ViewControllerB がメッセージを ViewControllerA に送り返し、データを送り返すことができるようになります。
ViewControllerA が ViewControllerB のデリゲートになるには、指定する必要がある ViewControllerB のプロトコルに準拠する必要があります。これにより、実装する必要があるメソッドが ViewControllerA に通知されます。
1) #import の下で @interface の上にある ViewControllerB.h で、プロトコルを指定します。
@protocol ViewControllerBDelegate <NSObject>
- (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString *)item;
@end
2) 次に、ViewControllerB.h でデリゲート プロパティを設定し、ViewControllerB.m で合成する必要があります。
@property (nonatomic, weak) id <ViewControllerBDelegate> delegate;
3) ViewControllerB では、viewcontroller をポップするときにデリゲートでメッセージを呼び出します。
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 をナビゲーション スタックにプッシュする前に、ViewControllerA がそのデリゲートであることを ViewControllerB に伝える必要があります。
ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib=@"ViewControllerB" bundle=nil];
viewControllerB.delegate = self
[self pushViewController:viewControllerB animated:YES];