我正在使用 facebook SDK 登录我的应用程序。如果用户没有登录,登录 VC 模态出现。用户点击登录后,如果登录成功,它会提醒 App Delegate。如果是,我想关闭模态登录 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 是谁,因此它可以发送关闭消息。你需要想出一些方法来实现这一点。一种方法是在 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 发送消息,告知其关闭登录视图。