从app委托中解除模态视图控制器

时间:2012-08-13 01:18:24

标签: objective-c ios xcode facebook

我正在使用facebook SDK登录我的应用程序。如果用户未登录,则会以模态方式显示登录VC。用户点击登录后,如果登录成功,它会向App Delegate发出警报。如果是的话,我想解雇模态登录VC。我如何从app delegate执行此操作?

2 个答案:

答案 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,告诉它解除登录视图。