Закрыть контроллер представления сообщений

У меня есть расширение iMessage в Swift, которое находится в расширенном представленииStlye, когда пользователь нажимает кнопку. Как только эта кнопка нажата, она должна полностью закрыть представление или, по крайней мере, вернуться в компактный режим. Я не уверен, что не так. Вот вызов didTransition с моей кнопки:

self.didTransition(to: MSMessagesAppPresentationStyle.compact)

и действие:

override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) {

    guard presentationStyle == .expanded else { return }
    self.dismiss(animated: true) {

    }
}

Но это не работает. Кто-нибудь знает, что я делаю неправильно?


person user3255746    schedule 01.11.2016    source источник


Ответы (3)


На самом деле правильная функция для вызова:

requestPresentationStyle(MSMessagesAppPresentationStyle)

Вы можете назвать это так в своем MSMessageAppViewController :

self.requestPresentationStyle(.compact)

Вам не нужно ничего переопределять;) Надеюсь, это поможет вам!

Примечание: ознакомьтесь с документацией здесь: https://developer.apple.com/reference/messages/msmessagesappviewcontroller

Это очень поможет вам!

person RomOne    schedule 02.11.2016

Эти функции помогут перейти от одного состояния перехода к другому в MSMessagesViewController:

requestPresentationStyle(.expanded)    
requestPresentationStyle(.compact)

Вышеупомянутый метод вызовет willTransition и didTransition: -

  override func willTransition(to presentationStyle: MSMessagesAppPresentationStyle) {

//Здесь мы можем проверить PresentationStyle и переместить контроллер в соответствии с необходимостью. то есть

    let controller: UIViewController
    if presentationStyle == .compact {
        controller = instantiateCompactController()
    }
    else {
        controller = instantiateExpandController()
    }
    //and then Present Controller
    }

Для получения дополнительной информации: https://developer.apple.com/videos/play/wwdc2016/224/

person Shrawan    schedule 16.11.2016

Вы также можете использовать функцию dismiss(), чтобы полностью закрыть развернутое MSMessagesAppViewController.

Обратите внимание, что это не то же самое, что dismiss(animated:), который отклоняет модально представленный vc. Документы здесь.

person LOP_Luke    schedule 12.08.2020