4

我正在使用 facebook SDK 登录我的应用程序。如果用户没有登录,登录 VC 模态出现。用户点击登录后,如果登录成功,它会提醒 App Delegate。如果是,我想关闭模态登录 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 是谁,因此它可以发送关闭消息。你需要想出一些方法来实现这一点。一种方法是在 appDelegate“callDismissOnMeIfFaceBookFails”上定义一个 ivar,并在您处于这种情况时设置它,否则它为零。

请注意,如果它为 nil,则 appDelegate 可以毫无问题地发送关闭消息!使用 nil 消息传递对您有利(我一直使用它)。[旁白:我看到了很多代码“if(obj) [obj message];” 不要做 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 发送消息,告知其关闭登录视图。

于 2012-08-13T01:26:38.697 回答