FacebookSDKを使用してアプリにログインしています。ユーザーがログインしていない場合、ログインVCがモーダルに表示されます。ユーザーがログインをタップすると、ログインが成功した場合にAppDelegateに警告します。もしそうなら、モーダルログインVCを却下したいと思います。アプリデリゲートからこれを行うにはどうすればよいですか?
2 に答える
何かがモーダルビューコントローラを提示する必要があるため、提示されたViewControllerを閉じてみることができます
UINavigationController *navigationController = (id) self.window.rootViewController;
[[navigationController presentedViewController] dismissModalViewControllerAnimated:NO];
特定のViewControllerが表示されているかどうかを確認したい場合(つまり、特定のViewControllerが表示されている場合にのみ閉じる)、チェックを追加できます。
UIViewController *viewController = [navigationController presentedViewController];
if ([viewController isMemberOfClass:[YourViewController class]]) {
[viewController dismissModalViewControllerAnimated:NO];
}
appDelegateは、ホスティングviewControllerが誰であるかを知るための何らかの方法を必要とするため、却下メッセージを送信できます。これを実現するための何らかの方法を理解する必要があります。1つの方法は、appDelegate "callDismissOnMeIfFaceBookFails"でivarを定義し、この状況にあるときに設定します。それ以外の場合はnilです。
nilの場合、appDelegateはオーバーヘッドなしで問題なく却下メッセージを送信できることに注意してください。nilメッセージングを活用してください(私はいつもそれを使用しています)。[余談ですが、「if(obj)[objmessage];」というコードがたくさんあります。ifを実行しないでください-メッセージを送信するだけです-objがnilの場合、効果はなく、効率的に処理されます!]
編集:
つまり、AppDelegateクラスがあります。#interfaceでプロパティを定義します。
@property (nonatomic, strong) UIViewController *callDismissOnMeIfFaceBookFails;
実装では、@synthesizeします。メソッドを定義します。
- (void)dismissLoginView
{
[callDismissOnMeIfFaceBookFails dismissModalViewControllerAnimated:YES];
callDismissOnMeIfFaceBookFails = nil; // don't need it now, this unretains it
}
したがって、モーダルビューコントローラが表示される前に、表示オブジェクトはappDelegateプロパティ「callDismissOnMeIfFaceBookFails」をそれ自体に設定します。
ユーザーが正常にログインすると、ログインオブジェクトはappDelegateにメッセージを送信し、dismissLoginViewを通知します。