【问题标题】:Dismissing modal view controller from app delegate从应用程序委托中关闭模式视图控制器
【发布时间】:2012-08-09 06:17:42
【问题描述】:

我正在使用 facebook SDK 登录我的应用程序。如果用户没有登录,登录 VC 模态出现。用户点击登录后,如果登录成功,它会提醒 App Delegate。如果是,我想关闭模态登录 VC。如何从应用委托执行此操作?

【问题讨论】:

    标签: objective-c ios xcode facebook


    【解决方案1】:

    您可以尝试关闭呈现的 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];
    }
    

    【讨论】:

      【解决方案2】:

      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 发送消息,告知其关闭登录视图。

      【讨论】:

      • 我理解第一部分,AppDelegate 显然需要知道托管视图控制器是谁。但是,在那之后我有点困惑。我还在学习Objective-C,我不太清楚你所说的'在appDelegate“callDismissOnMeIfFaceBookFails”上定义一个ivar,并在你处于这种情况时设置它,否则它为零。你有没有机会提供一个简单的例子?非常感谢您迄今为止的帮助。
      • 非常感谢!我会试一试,让你知道我的进展情况。
      • 完美运行!非常感谢!
      猜你喜欢
      • 2013-10-29
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2011-12-29
      • 2020-09-20
      • 1970-01-01
      • 2015-08-16
      相关资源
      最近更新 更多