1

我在我的项目中使用 SwiftMessage。当屏幕上显示特定消息时,我希望当用户在消息视图之外(消息视图上的任何其他位置)点击时,会发生一些操作。我怎样才能做到这一点?

更新

我忘了说我正在使用带有一个按钮的 SwiftMessage。

4

1 回答 1

2

不幸的是,没有办法在MessageView.

但是,如果您dimMode是(已启用点击外部关闭),您可以使用ofinteractive轻松捕获.willHide.didHide事件:eventListenersSwiftMessages.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关闭将永远不会运行。

于 2020-11-16T11:18:31.203 回答