2017-01-14 4 views
1

ПроблемаMSMessagesAppViewController не вызывает didSelect() правильно?

КСН 10,2

didSelect() вызывается только при выборе сообщения в первый раз, но не во второй раз выбирая то же сообщение (сразу после первого выберите произошло) , Например:

  1. Нажмите на полученное сообщение MSMessage Message_A, когда приложение моего сообщения активно, метод didSelect() правильно вызван и переход приложения в расширенный вид.
  2. Нажмите на стрелку вниз, чтобы вернуть приложение к сжатому виду.
  3. Нажмите это сообщение - Message_A еще раз, на этот раз didSelect() не запускается.

Слова из яблочного

функ didSelect (MSMessage, разговор: MSConversation)

Вызывается после обновления системы собственности selectedMessage разговор в ответ пользователю выбора объекта сообщения в транскрипт.

Моя мысль

кажется selectedMessage не обновляется, когда мы щелкаем то сообщение во второй раз (потому что он уже был установлен в первый щелчок), таким образом, didSelect() не вызывается.

Вопрос

  • Могу ли я делать это не так?
  • Есть ли способ обойти и вызвать didSelect() до тех пор, пока происходит выбор? selectedMessage только для чтения ...
  • Или есть способ сделать сообщение истекать (исчезать) из разговора сразу после того, как пользователь открывает (кликает) сообщение?

ответ

0

Боюсь, что это ошибка, есть open radar for that (или это делается «дизайн», принимая во внимание, сколько времени прошло с тех пор вопрос был подан).

Тем не менее, когда сообщение выбрано, расширение iMessage пытается перейти в расширенный режим и вызывает метод делегата willTransition(to presentationStyle:) (который, как представляется, another bug или классный дизайн). Проверяя, был ли расширен расширенный контроллер, и настраивая ваши собственные флаги, вы можете сделать трюк, хотя в некоторых случаях он не является надежным.

+0

«когда выбрано сообщение, расширение Шеззад в пытается перейти к расширенному режиму»: этого не происходит. – shallowThought

+0

Спасибо за помощь @degapps. Я рассмотрел использование 'willTransition()', но трудно определить, происходит ли действие: 1) нажатие на сообщение ИЛИ 2) нажатие кнопки разворота – Jess

+0

Hi @shallowThought, спасибо за ваши комментарии, расширение происходит, когда я нажмите сообщение. – Jess

0

@degapps,

Вот обходной путь: После первого нажатия на сообщении, didSelect() приведет вас к развернутому виду. Теперь, если переход к компактному виду происходит, мы отклоняем это приложение. Это нехорошее решение и вряд ли будет работать для большинства приложений.

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

У меня такая же проблема, то didSelect() и willSelect() методы вызываются только один раз. я обходил эту проблему путем реализации моей логики в методе:

Objective C

-(void)didBecomeActiveWithConversation:(MSConversation *)conversation 

Swift

func didBecomeActive(with conversation: MSConversation) 
+0

Но это не имеет никакого смысла, так как эти функции вызываются даже тогда, когда сообщение не прослушивается. – GGirotto