SwiftUI toasts 不消失

问题描述 投票:0回答:2

我正在使用以下方法来显示 toast 消息

DispatchQueue.main.async {
Toastmessage = MyToasts(title: "Message Here" , type: .success)
mysettings.showMytoast = true // mysettings is an Environment variable
}

我这样添加的原因是因为 toast 是由于操作(从列表中删除项目)而发生的,并且从响应更新视图存在延迟。

现在的问题是,在我杀死该应用程序之前,吐司不会被解雇。 有什么解决办法吗?

ios swiftui grand-central-dispatch dispatch-queue
2个回答
1
投票

我认为你应该在一段时间后 showMyToast = false。

你可以这样做:

DispatchQueue.main.async {
    Toastmessage = MyToasts(title: "Message Here" , type: .success)
    mysettings.showMytoast = true // mysettings is an Environment variable
    
    let closeAfterSecond = 1
    DispatchQueue.main.asyncAfter(deadline: .now() + closeAfterSecond) {
        mysettings.showMytoast = false
    }
}

0
投票

我遇到了类似的问题,解决方案是将 Toast 的表示绑定到绑定 bool 参数

isPresenting: Binding<Bool>

然后在该 bool 的初始化中,添加一个带有 asyncAfter 的 didSet,将其自身设置回 false。

Toastmessage = MyToasts(title: "Message Here" , type: .success, isPresenting: showMyToast)

还有

@Published var showMyToast = false {
    didSet {
        if showMyToast {
            DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
                self.showMyToast = false
            }
        }
    }
}

这会强制在设定的时间后取消 Toast

© www.soinside.com 2019 - 2024. All rights reserved.