これは、デリゲートを使用するのに最適な場所のように思えます。RegisterViewController.hで、次のようなプロトコルを定義します
@protocol RegisterViewDelegate <NSObject>
- (void)tellRegisterDelegateSomething:(NSObject*)something;
@end
次に、クラスでデリゲートへのポインタを保持します
@interface RegisterViewController : UIViewController
@property (weak, nonatomic) id <RegisterViewDelegate> delegate;
@end
次に、表示しているView Controllerに、作成したばかりの新しいプロトコルを実装していることを伝えます。これは、このビューを表示する他のビューコントローラの.hファイルで行われます。
LoginViewController.hで
@interface LoginViewController : UIViewController <RegisterViewDelegate>
@end
DashboardViewController.h内
@interface DashboardViewController : UIViewController <RegisterViewDelegate>
@end
上記のクラスの.mファイルで、プロトコルのメソッドを実装します
- (void)tellRegisterDelegateSomething:(NSObject*)something
{
}
次に、このように表示するView Controllerのいずれかからセグエを実行するときに、デリゲートを割り当てる必要があります。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"SegueToFbRegister"])
{
RegisterViewController* destination = [segue destinationViewController];
destination.delegate = self;
}
}
これで、提示しているView Controller(デリゲート)を呼び出して、このように送り返す必要のある情報を処理することができます(これは、RegisterViewController.mで呼び出されます)。
if ([self.delegate respondsToSelector:@selector(tellRegisterDelegateSomething:)])
{
// Tell the delegate something.
[self.delegate tellRegisterDelegateSomething:something];
}
2つのコントローラーをパスバックする必要がある場合は、同じ基本パターンに従います。
@protocol LoginViewDelegate <NSObject>
- (void)tellLoginDelegateSomething:(NSObject*)something;
@end
次に、クラスでデリゲートへのポインタを保持します
@interface LoginViewController : UIViewController
@property (weak, nonatomic) id <LoginViewDelegate> delegate;
@end
次に、ダッシュボードビューコントローラーにプロトコルを実装していることを伝えます。これは、このビューを表示するダッシュボードビューコントローラーの.hファイルで行われます。
DashboardViewController.h内
@interface DashboardViewController : UIViewController <RegisterViewDelegate, LoginViewDelegate>
@end
DashboardViewControllerの.mファイルで、プロトコルのメソッドを実装します
セグエを実行するときは、ビューコントローラでデリゲートを設定する上記のパターンに従ってください。これで、LoginViewControllerでデリゲートメソッドが呼び出されたときに、DashboardViewControllerでもデリゲートを呼び出します。
LoginViewController.mで
- (void)tellRegisterDelegateSomething:(NSObject*)something
{
if ([self.delegate respondsToSelector:@selector(tellLoginDelegateSomething:)])
{
// Tell the delegate something.
[self.delegate tellLoginDelegateSomething:something];
}
}
これですべてが接続されたので、両方のコントローラー(または1つだけ)を介してデータを戻し、それを使って何かを行うことができます。どのviewcontrollerが表示されたかに基づいて、DashboardViewControllerでさまざまなデリゲートメソッドが呼び出されるため、現在のシナリオがわかります。
お役に立てれば。