SwiftMessage: как обрабатывать действие, когда пользователь нажимает вне окна просмотра сообщения?

Я использую SwiftMessage в своем проекте. когда на экране отображается конкретное сообщение, я хочу, чтобы при нажатии пользователем вне окна просмотра сообщения (в любом другом месте в окне просмотра сообщения) происходили некоторые действия. как я могу это сделать?

Обновить

Забыл сказать, что использую SwiftMessage с одной кнопкой.

1 ответ

Решение

К сожалению, нет возможности добавить действие при нажатии вне MessageView.

Однако если ваш dimMode является interactive (есть кран снаружи, чтобы закрыть) вы можете легко поймать .willHide и .didHide мероприятия с использованием eventListeners из SwiftMessages.Config:

let view = MessageView.viewFromNib(layout: .cardView)

var config = SwiftMessages.defaultConfig
config.dimMode = .gray(interactive: false)
config.eventListeners.append { event in
    switch event {
    case .willHide:
        // Handle will hide
    case .didHide:
        // Handle did hide
    default:
        break
    }
}
SwiftMessages.show(config: config, view: view)

Эти события будут запускаться по крану за пределами MessageView.

Обновление: в вашем конкретном случае, когда у вас есть кнопка, действие которой отличается от действия внешнего нажатия, вы можете использовать что-то вроде этого:

func showMessageView(buttonHandler: @escaping () -> Void, dismiss: @escaping () -> Void) {
    var buttonTapped = false
    let view = MessageView.viewFromNib(layout: .cardView)
    view.buttonTapHandler = { sender in
        buttonHandler()
        buttonTapped = true
    }

    var config = SwiftMessages.defaultConfig
    config.dimMode = .gray(interactive: false)
    config.eventListeners.append { event in
        if !buttonTapped, event == .didHide {
            dismiss()
        }
    }
    SwiftMessages.show(config: config, view: view)
}

Таким образом, когда кнопка нажата, dismiss закрытие никогда не запустится.

Другие вопросы по тегам