我正在使用facebook SDK登录我的应用程序。如果用户未登录,则会以模态方式显示登录VC。用户点击登录后,如果登录成功,它会向App Delegate发出警报。如果是的话,我想解雇模态登录VC。我如何从app delegate执行此操作?
答案 0 :(得分: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];
}
答案 1 :(得分:4)
appDelegate需要一些方法来知道托管viewController是谁,因此它可以发送dismiss消息。你需要找出一些方法来实现这一目标。一种方法是在appDelegate“callDismissOnMeIfFaceBookFails”上定义一个ivar,并在你处于这种情况时设置它,否则它是零。
注意如果它的nil,则appDelegate可以发送没有开销的dismiss消息没有问题!使用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,告诉它解除登录视图。