2010-12-16 2 views
0

アップルのデベロッパーのドキュメントや他の本、リソースなどのデリゲートのテーマがたくさんあります。スタックオーバーフローなど。しかし、私はまだそれを取得していません。デリゲートを使ってObj-C/Cocoaのビューコントローラチェーンを後ろに/上に移動する方法

私は最近、スタンフォードのCS193P Winter 2010シリーズでNavigation View Controllerなどの講義を視聴しました。その講義では、View Controllerのスタックにデータを渡すことについて簡単に話しています。しかし、彼らは理想的にデリバート/プロトコルを使用してデータを "後方に"(詳細ビューコントローラからリストビューコントローラなどに)渡すことを簡単に言及しましたが、デモやサンプルコードを投稿しませんでした。

この正確なシナリオのサンプルを読んで検索しましたので、デリゲート/プロトコルを使用して周りを囲むことができますが、見つけられません。ここで私がやっている疑似コードがあります。データを「後方に」通過させるべきか?

myListController : UIViewController <SetDataInParent> { 
// when pushing detail controller onto stack, 
// set DetailController delegate = self 
} 

myDetailController : UIViewController { 
//header file 
@protocol SetDataInParent <NSObject> 
- (void)willSetValue:(*NSString); 
@end 

@interface myDetailController { 
id <SetDataInParent> delegate; 
} 
@end 

// class/m file 
@implementation 
@synthesize delegate; 
- (void)willSetValue:(*NSString) { 
// code here that would take argument 
// from detail controller and set 
// a value or text field to that 
// argument in list controller 
} 
// send message to list controller class 
- [delegate willSetValue:string]; 
@end 
} 

答えて

0

デリゲートは、現在1つまたは複数のメッセージを送信している他のObjective-Cインスタンスです。 「後方」に行くあなたが指定したタイプ(id <SetDataInParent)それはSetDataInParentプロトコルに準拠する任意のObjective-Cのタイプだと読み込み(私はあなたのコードで定義されていますが、他の場所でそれを持つことができます表示されません。)

通常、2つのオブジェクト間のデリゲートリンクは、子ビューが作成されるときに作成されます。したがって、リストビューコントローラが詳細ビューコントローラを作成する時点で、前者は後者のデリゲートをselfに設定する必要があります。詳細ビューコントローラは、その委任ポインタを使用して、例えばwillSetValue:などを介して直接、または間接的に(performSelector:withObject:を介して)リストビューコントローラにメッセージを送信できます。performSelector:withObject:を使用する場合は、まず代理人のrespondsToSelector:に電話をかけることをお勧めしますオブジェクトがそのメッセージに応答しない場合は、例外をスローしないようにしてください。

+0

多分私はあなたのコメント、fbrertoを誤解しました。だから私は、 "list"がスタックに "detail"をプッシュし、次に "detail"のdelegateを "list?"に設定するというmyListControllerの擬似コードで正しい軌道に乗っています。私は@protocol SetDataInParentを間違った場所に配置しましたか? – Gregir

+0

@Gregir:あなたのコードでプロトコルを見逃しましたが、私は今それを見ています。はい、あなたの要約は、私が言っていたことに沿って聞こえます。 – fbrereto

+0

ありがとうございます。これは大きな助けになり、大きなハードルを乗り越えました。 – Gregir

関連する問題