【发布时间】:2021-05-01 18:13:24
【问题描述】:
我的代码基本上和this question 一样。我遇到的问题是,当tapGesture 事件发生时,工作表显示(调用sheet 代码)但调试显示showUserEditor 为假(在这种情况下,工作表如何显示......?)并且 selectedUserId 仍然是 nil (因此在打开它时会崩溃......)
观点:
struct UsersView: View {
@Environment(\.managedObjectContext)
private var viewContext
@FetchRequest(
sortDescriptors: [NSSortDescriptor(keyPath: \User.nickname, ascending: true)],
animation: .default)
private var users: FetchedResults<User>
@State private var selectedUserId : NSManagedObjectID? = nil
@State private var showUserEditor = false
var body: some View {
NavigationView {
List {
ForEach(users) { user in
UserRowView(user: user)
.onTapGesture {
self.selectedUserId = user.objectID
self.showUserEditor = true
}
}
}
}.sheet(isPresented: $showUserEditor) {
UserEditorView(userId: self.selectedUserId!)
}
}
}
如果您愿意,我可以发布编辑器和行,但它们似乎与问题无关,因为魔术应该发生在视图中。
【问题讨论】:
-
至少设置
selectedUserId之前设置showUserEditor为true,换行。 -
或者使用
sheetinit 和item -
@vadian 我这样做了......这是显而易见的方式,我改变了它并没有回来检查。我将编辑问题以反映这一点。无论如何,据我了解,SwiftUI 重绘周期无关紧要。另外,请注意,当我调试
sheet代码时,即使在打印变量时 showUserEditor 也是错误的,所以我在那里感到困惑......也许我不清楚调试@State 变量时应该寻找什么。 -
@loremipsum - 找到你的意思:developer.apple.com/documentation/swiftui/view/… 我会试一试。
-
有一个
.sheetinit,您可以在其中将项目作为参数传递。当项目的@State不是nil时,它会显示一个工作表developer.apple.com/documentation/swiftui/text/…
标签: swiftui swiftui-navigationview