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
закрытие никогда не запустится.