2012-08-13 41 views
4

我正在使用Facebook SDK登录到我的应用程序。如果用户未登录,登录VC将以模态方式出现。一旦用户点击登录,它就会向App Delegate发出通知,告知登录是否成功。如果是这样,我想解雇模态登录VC。我如何从应用程序代理执行此操作?从应用程序委托中解除模态视图控制器

回答

4

appDelegate需要一些方法来知道托管viewController是谁,因此它可以发送解雇消息。你需要找出一些办法来实现这一点。一种方法是在appDelegate“callDismissOnMeIfFaceBookFails”上定义一个ivar,并在你处于这种情况时设置它,否则为零。

注意,如果它的零,appDelegate可以发送解雇消息没有开销没有问题!使用无消息传递给你的优势(我一直使用它)。 [旁白:我看到这么多的代码“if(obj)[obj message];”不要做,如果 - 仅仅发送消息 - 如果obj是零它没有任何效果,并有效地处理]

编辑:!

所以,你有一个类的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,告诉它关闭LoginView。

+0

我明白第一部分,AppDelegate显然需要知道主持人视图控制器是谁。但是,之后我感到有些困惑。我仍然在学习Objective-C,而且我不太清楚'在appDelegate上定义一个ivar“callDismissOnMeIfFaceBookFails”的意思,并且在你处于这种情况时设置它,否则它就是零。 有没有可能提供一个快速示例的机会?真的很感谢你的帮助。 – 2012-08-13 10:27:11

+0

非常感谢!我会告诉你一切,并让你知道我如何继续。 – 2012-08-13 12:21:37

+0

完美无瑕!非常感谢! – 2012-08-13 16:54:29

7

你可以尝试驳回提出的ViewController,因为有些事情呈现模态视图控制器

UINavigationController *navigationController = (id) self.window.rootViewController; 
[[navigationController presentedViewController] dismissModalViewControllerAnimated:NO]; 

如果如果特定的ViewController正在呈现你想检查(即只有当某一个是解散显示),那么你可以添加一张支票。

UIViewController *viewController = [navigationController presentedViewController]; 

if ([viewController isMemberOfClass:[YourViewController class]]) { 
    [viewController dismissModalViewControllerAnimated:NO]; 
} 
相关问题