4

FacebookSDKを使用してアプリにログインしています。ユーザーがログインしていない場合、ログインVCがモーダルに表示されます。ユーザーがログインをタップすると、ログインが成功した場合にAppDelegateに警告します。もしそうなら、モーダルログインVCを却下したいと思います。アプリデリゲートからこれを行うにはどうすればよいですか?

4

2 に答える 2

7

何かがモーダルビューコントローラを提示する必要があるため、提示された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];
}
于 2012-10-23T13:59:07.100 に答える
4

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を通知します。

于 2012-08-13T01:26:38.697 に答える