2

问题

在 iOS 10.2 上

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

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

苹果的话

func didSelect(MSMessage,对话:MSConversation)

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

我的想法

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

问题

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

3 回答 3

1

恐怕这是一个错误,对此有一个开放的雷达(或者它是“设计”完成的,考虑到自从提交问题以来已经过去了多少时间)。

Nevertheless, when message is selected, iMessage's extension is trying to move to expanded mode and calls willTransition(to presentationStyle:)delegate method (which appears to be another bug or cool-thing-by-design). 通过检查扩展控制器是否已经显示并调整您的自定义标志,您可以做到这一点,尽管在某些情况下它并不可靠。

于 2017-01-14T06:48:59.717 回答
1

我有同样的问题,didSelect() 和 willSelect() 方法只调用一次。我通过在方法中实现我的逻辑来规避这个问题:

目标 C

-(void)didBecomeActiveWithConversation:(MSConversation *)conversation

迅速

func didBecomeActive(with conversation: MSConversation)
于 2017-08-11T15:01:26.870 回答
0

@degapps,

这是一个解决方法:第一次单击消息后,didSelect() 将带您进入扩展视图。现在,如果发生向紧凑视图的转换,我们将关闭这个应用程序。这不是一个好的解决方案,并且不太可能适用于大多数应用程序。

override func willTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
    if (presentationStyle == .compact) {
        if let _ = self.activeConversation?.selectedMessage {
            self.dismiss()
        }
    }
}
于 2017-01-15T06:24:23.110 回答