我有一个 SwiftUI 模式,我想清除其状态或重新初始化。考虑到此模式可以打开可能具有某种状态的其他模式,重新初始化将是首选。
这是一个简单的例子:
import SwiftUI
struct OtherView: View {
@State var otherViewState: String = ""
var body: some View {
TextField($otherViewState, placeholder: Text("Demo Text Input"))
}
}
struct Demo: View {
@State var showModal: Bool = false
var modal: Modal {
Modal(OtherView(), onDismiss: { self.showModal = false })
}
var body: some View {
Button(action: { self.showModal = true }) {
Text("Toggle Modal")
}
.presentation(self.showModal ? self.modal : nil)
}
}
无论 OtherView 如何被关闭,我都想重新打开它并清除其文本状态,并要求 OtherView 可以打开模态本身。添加一个clear
OtherView 结构本身的方法始终是一种选择,但我认为它不是一个可维护的方法。
Below is a video of the simplified problem:
9月11日更新:这似乎在 iOS 13 GM 中得到了修复。
我一直在为同样的事情而苦苦挣扎,我想这是一个将在 9 月份解决的错误,我已经在反馈助手上提交了它,请确保这样做!
现在,您只需创建一个新的 UIHostingController 来包装您想要以模态方式显示的 SwiftUI 视图。我知道它看起来很老套,但至少它有效:
import SwiftUI
struct OtherView: View {
@State var otherViewState: String = ""
var body: some View {
TextField($otherViewState, placeholder: Text("Demo Text Input"))
}
}
struct Demo: View {
var body: some View {
Button("Toggle Modal") {
self.showModal()
}
}
func showModal() {
let window = UIApplication.shared.windows.first
window?.rootViewController?.present(UIHostingController(rootView: OtherView()), animated: true)
}
}
您可能想改进获取窗口的方式,特别是如果您支持多个窗口,但我认为您已经明白了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)