iMessage扩展:根导航控制器导致所有委托方法无法在我的MSMessagesAppViewController中调用

时间:2017-07-05 18:36:25

标签: ios objective-c iphone imessage imessage-extension

我有一个新的iMessage扩展项目,我尝试了2种构建导航堆栈的方法:

  1. 在我的故事板中,我将入口点设置为一个UINavigationController,它将我的MSMessagesAppViewController作为根控制器。

  2. 或者我直接将MSMessagesAppViewController设置为故事板中的入口点。 (没有拥有它的UINavigationController)。

  3. 对于上面的场景#1,导航控制器工作正常,我可以在堆栈上推送新屏幕。 (除了整个导航栏隐藏在扩展视图中,这是一个我还需要弄清楚的单独问题)。但是,使用此配置调用MSMessagesAppViewController的NONE委托方法。如: willTransitionToPresentationStyle didTransitionToPresentationStyle, willBecomeActiveWithConversation, didSelectMessage (没有一个被称为)

    对于上面的场景#2,将调用MSMessagesAppViewController方法。 (因为UINavigationController不是Storyboard中的入口点)。

    所以我的问题是:如何让UINavigationController成为我的iMessage扩展应用程序的根目录,这样我就可以执行Push导航,但同时调用MSMessagesAppViewController的方法,如Apple API所述?

1 个答案:

答案 0 :(得分:2)

虽然似乎没有记录,但看起来消息扩展看起来要求入口点是MSMessagesAppViewController的子类。这些方法不是委托方法,它们是超类覆盖,所以没有办法安排它们去其他任何地方。消息扩展系统可以处理你描述的情况,但是 - 显然 - 不会。

我要尝试的是:

  • 使入口点成为MSMessagesAppViewController
  • 的子类
  • 在该对象的生命周期的早期(可能在viewDidLoad中)创建一个UINavigationController并将其添加为MSMessagesAppViewController子类的子视图控制器。让它填满整个屏幕。

现在 - 实际上 - 您的导航控制器是扩展程序的根目录。它不是真正的根,因为像willTransitionToPresentationStyle这样的消息事件仍将通过MSMessagesAppViewController子类。但其他一切都从那里开始。它是UI和导航的根源。

与此同时,向Apple提交增强请求可能会更好。有理由认为消息扩展系统会检查导航控制器的根VC以查看它是否是正确的类,并且可能他们将来会添加它。