我正在使用Facebook SDK登录到我的应用程序。如果用户未登录,登录VC将以模态方式出现。一旦用户点击登录,它就会向App Delegate发出通知,告知登录是否成功。如果是这样,我想解雇模态登录VC。我如何从应用程序代理执行此操作?从应用程序委托中解除模态视图控制器
4
A
回答
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。
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];
}
相关问题
- 1. 从应用程序委托调用视图控制器方法
- 2. 视图控制器不是从应用程序委托呈现
- 3. iOS4中的应用程序委托和视图控制器
- 4. Xcode的应用程序委托给每个视图控制器
- 5. 应用程序委托人看不到视图控制器
- 6. 如何从应用程序委托和/或其他视图控制器访问多个视图控制器?
- 7. 解除模态视图控制器
- 8. 解除模态视图控制器
- 9. 使用委托给视图控制器
- 10. 从应用程序委托传递数据到视图控制器
- 11. swift,UIUserNotificationAction从视图控制器,而不是应用程序委托
- 12. 委派和模态视图控制器
- 13. 从应用委托推视图控制器
- 14. 如何在应用程序启动时从应用程序委托加载不同的视图控制器类(例如,从应用程序委托)
- 15. 委托模态视图swift
- 16. 从应用程序的委托打开控制器
- 17. CLLocationManager委托/多个视图控制器
- 18. 视图控制器委托返回无
- 19. 如何从视图控制器中删除应用程序委托文件中的rootview设置
- 20. 多视图和应用程序委托?
- 21. 从tableView委托类中调用视图控制器segue
- 22. 从视图控制器类中调用委托方法
- 23. 参考指南:替换根视图控制器/应用程序委托?
- 24. 使用应用委托更新视图控制器的变量
- 25. 你如何从应用程序委托中解除UIActionSheet?
- 26. 访问在另一个控制器的应用程序委托中创建的视图控制器
- 27. 解除模态视图后可见视图控制器
- 28. 应用程序不呈现模态视图控制器
- 29. 无法让UIWEBVIEW在除应用程序委托之外的任何视图控制器中工作
- 30. 如何从视图控制器视图返回到目标c中的应用程序委托控制器视图?
我明白第一部分,AppDelegate显然需要知道主持人视图控制器是谁。但是,之后我感到有些困惑。我仍然在学习Objective-C,而且我不太清楚'在appDelegate上定义一个ivar“callDismissOnMeIfFaceBookFails”的意思,并且在你处于这种情况时设置它,否则它就是零。 有没有可能提供一个快速示例的机会?真的很感谢你的帮助。 – 2012-08-13 10:27:11
非常感谢!我会告诉你一切,并让你知道我如何继续。 – 2012-08-13 12:21:37
完美无瑕!非常感谢! – 2012-08-13 16:54:29