2011-12-09 4 views
0

私は、モーダルセグをUINavigatioController(設定)に呼び出すVC(ルート)を持っています。ユーザーは自分が望むものを変更することができます。最初のVC(ルート)に、変更が行われたことを知らせるにはどうすればよいですか。 UINavの代理人は(ルート)VCです。モーダルセグからデータを戻すためのアイデアはありますか?歓声データをUINavigationControllerパーティーに渡す

答えて

2

あなたのAppDelegateを、子VCが呼び出すことができる中央通信ハブとして使用し、データを渡します。次のことを試してみてください。

まず、共有デリゲートクラスメソッド、およびそのようなあなたのAppDelegateで、児童VCにデータを渡す方法設定:

// In MyAppDelegate.h 

#import <UIKit/UIKit.h> 
#import <CoreLocation/CoreLocation.h> 

@interface MyAppDelegate : NSObject { 
// rootviewcontroller is the parent of your UINavigationController 
UIViewController *rootViewController; 
} 
+ (MyAppDelegate *)sharedAppDelegate; 
-(void)passData:(NSString*)myString; 

と..だから

// In MyAppDelegate.m 

#import "MyAppDelegate.h" 

@implementation MyAppDelegate.m 

+ (MyAppDelegate.m *)sharedAppDelegate 
{ 
    return (MyAppDelegate.m *) [UIApplication sharedApplication].delegate; 
} 

-(void)passData:(NSString*)myString{ 

// pass data to parent of UINavigationController 
[rootViewController hereIsSomeData:myString]; 

} 

そしてUINavigationController(VC.m)の.mファイルから、AppDelegateクラスをインポートし、共有デリゲートをインスタンス化します。これにより、AppDelegateを "呼び出し"てデータを送信することができます。

// In VC.m 
#import "MyAppDelegate.h"; 

// ... 
NSString *myString = @"alskdjfalsdjfq324r"; 
[[MyAppDelegate sharedAppDelegate] passData:myString]; 
+0

恐ろしい解決策!!!!ありがとうございました... "中央通信拠点としてのアプリケーションデリゲート"とよく言われています。これは、同じナビゲーションコントローラの一部ではない代理人を保持するクールな解決策になります。再度、感謝します ! – user1046037

0

別の方法もあります。親コントローラにNSMutableDictionaryなどの可変オブジェクトを作成し、それを子コントローラに渡すことができます。子コントローラ内のNSMutableDictionaryに対する変更は、両方ともメモリ内の同じオブジェクトへのポインタであるため、元の親コントローラに引き継がれます。がんばろう!

関連する問題