あるViewControllerから別のViewControllerにパラメーターを渡すにはどうすればよいですか(ストーリーボードでViewControllerを定義しました)?putExtra
Android、または値を入れるバンドルに似たものはありますか?最初のViewControllerからいくつかの値を読み取り、POSTリクエストを行う別のViewControllerに渡す必要があります。
3 に答える
prepareForSegue:sender:
ストーリーボードを使用するときに、あるビュー コントローラーから別のビュー コントローラーにデータを渡すための推奨される方法です。識別子をチェックして、目的のセグエであることを確認し、目的のビュー コントローラーへのポインターを取得し、必要なプロパティを設定します。次のようになります。
- (void) prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender
{
if( [[segue identifier] isEqualToString:@"foo"] ) {
FooViewController* fooView = segue.destinationViewController;
fooView.someProperty = self.someProperty;
}
}
昨年の WWDC のストーリーボード セッションは、まだご覧になっていない方におすすめです。
これはとても簡単です。2番目のビューコントローラーでプロパティを作成し、1つのビューコントローラーからこれらのプロパティに値を渡す必要があります
他の方法とは別に、プロトコルとデリゲートを使用して、あるコントローラーから別のコントローラーにオブジェクトを渡すことができます。オブジェクト resposeData をコントローラー (クラス) A から B に渡す必要があるとします。以下は、実行できる手順です。
プロトコルを宣言します。
@protocol NetworkOperationDelegate
@必要
-(void) operationCompleted:(id) responseData タグ:(id) タグ;
-(void) operationFailed:(id) responseData タグ:(id) タグ;
@終わり
デリゲート クラスを指すクラス A で Id 型のプロパティを宣言します。
@property (nonatomic, retain) id < NetworkOperationDelegate > operationDelegate;
あなたのカスタム初期化子でself.delegateを初期化するとしましょう:
-(id) initWithRequest:(NSURLRequest *)request operationDelegate:(id) デリゲート タグ:(id) タグ
{ self = [super init]; if (self) { self.request = request; self.tag = tag; self.operationDelegate = delegate; } return self;
}
次に、クラスAで定義したいときはいつでもデリゲートでメソッドを呼び出します。クラスAがデータを受信したとき、クラスBに受信したデータを処理させたいとしましょう
クラス B @interface B : NSObject @end にプロトコル メソッドを必ず実装してください。
@implementation B -(void) operationCompleted:(id) responseData tag:(id) tag { // imlement code
}
-(void) operationFailed:(id) responseData タグ:(id) タグ {
// imlement code
}
@end
お役に立てれば!!!