作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 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 可以自己打开模态。在 OtherView 结构本身上添加一个 clear
方法始终是一种选择,但我认为它不是一个可维护的方法。
最佳答案
9 月 11 日更新:这似乎已在 iOS 13 GM 中修复。
我一直在为同样的事情而苦苦挣扎,我想这是一个将在 9 月解决的错误,我已经在反馈助手上提交了它,请务必这样做!
虽然现在您可以创建一个新的 UIHostingController 来包装您想要以模态方式显示的 SwiftUI View 。我知道它看起来很老套,但至少它有效:
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)
}
}
您可能想改进获取窗口的方式,特别是如果您支持多个窗口,但我想您明白了。
关于ios - SwiftUI:清除模态状态或重新初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56881222/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!