MSMessagesAppViewController没有正确调用didSelect()?

时间:2017-01-14 06:15:58

标签: ios swift msmessage

问题

在iOS 10.2上

didSelect()仅在第一次选择消息时被调用,但不是第二次选择相同的消息时(在第一次选择发生后)。例如:

  1. 在我的消息应用处于活动状态时,单击收到的MSMessage Message_A,正确调用didSelect()方法,并将应用程序转移到扩展视图。
  2. 单击向下箭头将应用程序恢复为压缩视图。
  3. 再次点击相同的消息 - Message_A,这次didSelect()没有被触发。
  4. 来自Apple的话

      

    func didSelect(MSMessage,conversation:MSConversation)

         

    在系统更新对话的selectedMessage属性以响应用户在记录中选择消息对象后调用。

    我的想法

    当我们第二次点击该消息时(因为它已经在第一次点击中设置),似乎selectedMessage没有更新,因此没有调用didSelect()。

    问题

    • 我做错了吗?
    • 只要选择发生,有没有办法解决并调用didSelect()? selectedMessage是只读的......
    • 用户打开(点击)消息后,有没有办法让消息从对话立即消失(消失)

2 个答案:

答案 0 :(得分:1)

我担心这是一个错误,有一个open radar for that(或者它已经完成了设计',考虑到问题已经过了多长时间已提交)。

尽管如此,当选择消息时,iMessage的扩展程序正在尝试转移到扩展模式并调用willTransition(to presentationStyle:)委托方法(看似another bug或冷却 - 设计) )。通过检查扩展控制器是否已经显示并调整自定义标志,您可以做到这一点,尽管在某些情况下它不可靠。

答案 1 :(得分:0)

@degapps,

以下是一种解决方法:首次点击消息后,didSelect()将带您进入展开式视图。现在,如果发生向紧凑视图的转换,我们将关闭此应用程序。它不是一个好的解决方案,不太可能适用于大多数应用程序。

override func willTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
    if (presentationStyle == .compact) {
        if let _ = self.activeConversation?.selectedMessage {
            self.dismiss()
        }
    }
}