gpt4 book ai didi

swift - 在SwiftUI中如何在XcodePreview中设置editMode的环境变量

转载 作者:行者123 更新时间:2023-12-03 09:19:58 25 4
gpt4 key购买 nike

给定这样的导航堆栈层次结构,其中将编辑按钮添加到另一个源文件中

struct ContentView : View {
var body: some View {
NavigationView {
EditingView()
}.navigationBarItems(trailing: EditButton())

}
}

使用“编辑”按钮的 View 位于代码库的其他位置
struct EditingView : View {

@State var dataValue: String = "Initial Value"
@Environment(\.editMode) var editMode

var body: some View {
VStack(alignment: .leading) {
if self.editMode?.value == .inactive {
Text(dataValue)
} else {
TextField(($dataValue))
}
}.padding()
.navigationBarTitle("Lets edit some State")
.navigationBarItems(trailing: EditButton())
}
}

我可以在预览中以编程方式设置初始编辑模式吗?有没有一种方法可以使用环境在没有编辑按钮的情况下查看EditingView?片段中显示了一些我可以找到工作的方法,但是我希望我能找到一种方法来通过环境编程设置和初始值。
#if DEBUG
struct EditingView_Previews : PreviewProvider {
static var previews: some View {
NavigationView {
VStack {
EditingView()

// I would prefer to use an environment variable.
// Here is the best thought at some code:
//
// `.environment(\.editMode, .inactive)`
//
// the compiler Error returned:
// Type 'Binding<EditMode>?' has no member 'inactive'
//
// which I understand since it is a binding
// not a direct access to an enum variable.
// But can I set it somehow or should I let the system
// handle it entirely?

// So to get around the issue I have an extra edit button
EditButton()

}
}
}
// Or this could work
//.navigationBarItems(trailing: EditButton())
}
#endif

一个示例项目可以在这里找到:
https://github.com/PaulWoodIII/PreviewEditMode

最佳答案

您可以通过添加到预览提供程序中,将其作为常量传递:

.environment(\.editMode, Binding.constant(EditMode.active))

例如。:
struct EditingView_Previews : PreviewProvider {
static var previews: some View {
NavigationView {
EditingView()
}
}
.environment(\.editMode, Binding.constant(EditMode.active))
}

}

关于swift - 在SwiftUI中如何在XcodePreview中设置editMode的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56923351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com