2011-01-27 2 views
0

私はナビゲーション画面上のボタンで、ナビゲーションスタックにプッシュされた選択画面でゲッターとセッターを使用しています。Obj-c、ナビゲーションにプッシュされた選択画面のゲッターとセッターを使用している場合、どこで値を取得できますか?viewWillAppear?

選択画面で変数が設定されますが、親画面で値を取得する場所がわかりません。

選択画面は、ナビゲーションバーボタンでのみ開始および定義されます。

親画面のインターフェースでviewControllerを宣言する必要はありますか?

答えて

0

これを行う方法はたくさんあります。私はiPhoneソフトウェアで作業していましたが、そのほとんどを実験しました。ここに1つあります。

子ビューコントローラでは、親ビューコントローラへのポインタであるプロパティを作成できます。 Thusly:

ChildViewController.h

#import "ParentViewController.h" 

@interface ChildViewController : UIViewController 
{ 
    ParentViewController *parentViewController; 
} 

@property (nonatomic, retain) ParentViewController *parentViewController; 

ChildViewController.m

@implementation ChildViewController 

@synthesize parentViewController; 

-(void)dealloc 
{ 
    [parentViewController release]; 
} 

あなたが子供をインスタンス化し、ナビゲーションコントローラにそれをプッシュする作業を行うと、あなたが望む任意の変数を設定することができます

ChildViewController *child = [[ChildViewController alloc] initWithNib:@"nibName" withBundle:nil]; 
child.parentViewController = self; 
[self.navigationController pushViewController:child animated:YES]; 
[child release]; 

次に、insiあなたが戻ってオフに子供をポップするときDEは子供、あなたが次に...

self.parentViewController.dataField = @"My data for an NSString property of the parent view controller!"; 

を彼らは子供の分野でユーザーが設定し得るよう、直接親の性質についての話、そうすることができ、あなたの」実際にそのデータを親ビューコントローラの.dataFieldプロパティに設定していることがわかります。

(この回答のすべてのコードはここに入力したもので、例としてのみ意図しています - 私はスペルや文法などについて約束していません。)

+0

しかし循環参照に注意してください:親は子を保持し、子は親を保持します。あなたはループを壊すために余分な予防措置が必要になります。そうしないと、不快なリークが発生します。 – Axel

+0

ここでUINavigationControllerを使用していますが、ポップ時に子を解放します。また、ParentViewControllerは子をnavスタックにプッシュするときに子を解放します。この例では真円度はありませんが、このアプローチの最も一般的なアプリケーションが確かにそれに陥りやすいことは事実です。ちょうどそのことを明確にするために、サンプルコードにプッシュでリリースを追加しました。 –

0

UINavigationControllerはナビゲーションスタックへのアクセスを提供します。ドキュメントhereを確認してください。ナビゲーション履歴に親ビューがあり、そのプロパティに簡単にアクセスできるようにする必要があります。それを見つけるために

、UINavigationControllerは、上記のような方法があります。現在、ナビゲーションスタック上の

viewControllers

View Controllerを。 @property(非アトミックコピー)にNSArray * viewControllers 議論

ルート・ビュー・コントローラは、アレイ内のインデックス0にあり、バックビューコントローラはインデックスであり、> N-2、及びトップコントローラインデックスN-です1、ここで、nは配列内の項目の数です。

つまり、親ビューコントローラはn-2です。

+0

だから、ビューが親ビューviewWillApearに戻ると、どこにパラメータにアクセスしますか? – Jules

+0

ああ、大丈夫です - 子ビューからの情報を渡したいですか?それで、UINavigationControllerで親ビューを見つけ、適切なプロパティを設定してください。 - viewWillDisappearで – Axel

+0

上記のソリューションテキストの中で親ビューコントローラを見つける方法についての情報があります。 – Axel

関連する問題