如何在SwiftUI中使用Toast-Swift?
How to use Toast-Swift in SwiftUI?
我想在 SwiftUI 视图中通过 CocoaPods Toast-Swift 使用这个项目。它是用于 UIView 的,所以我尝试写一个 ViewController 并将其包装到 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 上找到了一些自定义实现 (),但它们的行为并不完全符合我的要求。
有人可以帮我解决这个问题吗? SwiftUI 中的 Toast 是否还有其他推荐?提前致谢!
我不知道您是否已经解决了问题,但我将其张贴在这里以防有人感兴趣。我设法做到这一点,获取对 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")
}
}
//...
希望对您有所帮助。
尝试使用这个开源: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)
}
}
}
我把它放在这里是为了那些仍在使用 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!")
}
}
}
我想在 SwiftUI 视图中通过 CocoaPods Toast-Swift 使用这个项目。它是用于 UIView 的,所以我尝试写一个 ViewController 并将其包装到 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 上找到了一些自定义实现 (
有人可以帮我解决这个问题吗? SwiftUI 中的 Toast 是否还有其他推荐?提前致谢!
我不知道您是否已经解决了问题,但我将其张贴在这里以防有人感兴趣。我设法做到这一点,获取对 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")
}
}
//...
希望对您有所帮助。
尝试使用这个开源: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)
}
}
}
我把它放在这里是为了那些仍在使用 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!")
}
}
}