ストーリーボードセグエから呼び出されたログインビューコントローラーがあります。ユーザーが正しくログインしたら、現在のViewControllerを閉じ、呼び出し元のViewControllerに戻り、ログインボタンを非表示にする必要があります。
ボタンを非表示にするために、送信者のViewControllerを参照するにはどうすればよいですか?root
ViewControllerのインスタンスをログインに渡す必要がありますか、それとも別の方法がありますか?
ストーリーボードセグエから呼び出されたログインビューコントローラーがあります。ユーザーが正しくログインしたら、現在のViewControllerを閉じ、呼び出し元のViewControllerに戻り、ログインボタンを非表示にする必要があります。
ボタンを非表示にするために、送信者のViewControllerを参照するにはどうすればよいですか?root
ViewControllerのインスタンスをログインに渡す必要がありますか、それとも別の方法がありますか?
委任を使用する必要があります。ボタンのある VC を相手のデリゲートにします。ログインが成功したら、VC を終了し、デリゲート メソッドを呼び出してボタンを非表示にします。
委任を使用します。
DetaliViewControler の場合、次のようなプロトコルを作成します
@protocol DetailViewControllerDelegate <NSObject>
-(void)successFullyLoggedInOnController:(DetailViewController *) controller;
@end
次のように、デリゲート宣言を DetailViewController のインターフェイスに追加します
@property (weak) id<DetailViewControllerDelegate> delegate;
MasterViewController をプロトコルに準拠させます。
-(void)successFullyLoggedInOnController:(DetailViewController *) controller
{
[self.loginButton setHidden:YES];
}
MasterViewController が DetailViewController を表示する直前に、次のようにします。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"DetailViewSegue"]) {
DetailViewController *vc = segue.destinationViewController;
vc.delegate = self;
}
}
DetailViewController で、入力および検証された資格情報が呼び出されると、
[self.delegate successFullyLoggedInOnController:self];
DetailViewController を閉じる