ios 如何在SwiftUI中使用Toast-Swift?

rkue9o1l  于 2023-02-26  发布在  iOS
关注(0)|答案(4)|浏览(638)

我想在SwiftUI视图中通过CocoaPods使用这个项目Toast-Swift。它是用于UIView的,所以我尝试编写一个ViewController并将其 Package 到SwiftUI中,但结果是屏幕上什么也没有。
我的代码:

struct ToastView: UIViewControllerRepresentable{

    @State var text: String

    func makeUIViewController(context: UIViewControllerRepresentableContext<ToastView>) -> UIToast {
        return UIToast(text: text)
    }

    func updateUIViewController(_ uiViewController: UIToast, context: UIViewControllerRepresentableContext<ToastView>) {

    }
}

class UIToast: UIViewController{

    var text: String = ""

    init(text: String) {
        super.init(nibName: nil, bundle: nil)
        self.text = text
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.makeToast(text)
    }
}

我在SwiftUI的Toast(SO question)上找到了一些自定义实现,但它们的行为并不完全是我所寻找的。
有没有人能帮我解决这个问题?SwiftUI中还有其他关于Toast的推荐吗?提前感谢!

kmbjn2e3

kmbjn2e31#

我不知道你是否已经解决了你的问题,但是我在这里发布这个,以防有人感兴趣。我设法做到了这一点,获得了对SceneManager的引用,然后使用它的rootViewController视图。有了这个视图,你可以使用Toast_Swift示例:

Button(action: {
                 let scene = UIApplication.shared.connectedScenes.first
                 if let sceneDelegate : SceneDelegate = scene?.delegate as? SceneDelegate{
                    if let view = sceneDelegate.window?.rootViewController?.view{
                      view.makeToast("Text")
                  }
              }
//...

希望有帮助。

x33g5p2x

x33g5p2x2#

尝试使用此开放源代码:https://github.com/huynguyencong/ToastSwiftUI .我发现它非常好用。

struct ContentView: View {
    @State private var isShowingToast = false
    
    var body: some View {
        VStack(spacing: 20) {
            Button("Show toast") {
                self.isShowingToast = true
            }
            
            Spacer()
        }
        .padding()

        // Just add a modifier to show a toast, with binding variable to control
        .toast(isPresenting: $isShowingToast, dismissType: .after(3)) {
            ToastView(message: "Hello world!", icon: .info)
        }
    }
}
bweufnob

bweufnob3#

您可以尝试使用Toast_Swift显示吐司

if let view = UIApplication.shared.windows[0].rootViewController?.view {
    view.makeToast("text)
}
dldeef67

dldeef674#

我把它放在这里给任何仍然在使用SwiftUI寻找这个主题的人:
https://github.com/elai950/AlertToast

struct ContentView: View{

    @State private var showAlert = false

    var body: some View{
        VStack{

            Button("Show Alert"){
                 showAlert.toggle()
            }
        }
        .toast(isPresenting: $showAlert){

            // `.alert` is the default displayMode
            AlertToast(displayMode: .alert, type: .regular, title: "Message Sent!")
            
            //Choose .hud to toast alert from the top of the screen
            //AlertToast(displayMode: .hud, type: .regular, title: "Message Sent!")
        }
    }
}

相关问题