我的环境值如下:
@Environment(\.isPresented) var isPresented: Bool
Run Code Online (Sandbox Code Playgroud)
该环境值定义如下:
private struct IsPresented: EnvironmentKey {
static let defaultValue: Bool = false
}
extension EnvironmentValues {
var isPresented: Bool {
get { self[IsPresented.self] }
set { self[IsPresented.self] = newValue }
}
}
extension View {
func isPresented(_ isPresented: Bool) -> some View {
environment(\.isPresented, isPresented)
}
}
Run Code Online (Sandbox Code Playgroud)
我想在我的一个视图中读取此环境值,以决定是否将视图显示为全屏。然而,这行代码不起作用:
.fullScreenCover(isPresented: self.$isPresented) {
// It says there's no such member in my view.
Run Code Online (Sandbox Code Playgroud)
因此,我的问题是,由于 .fullScreenCover 需要绑定,因此如何将环境值转换为绑定?
jn_*_*pdx 10
如果你希望它是一个可写值,我认为你的环境值应该是Binding<Bool>
而不是仅仅Bool
。presentationMode
例如,这就是系统的工作原理。
private struct IsPresented: EnvironmentKey {
static let defaultValue: Binding<Bool> = .constant(false)
}
extension EnvironmentValues {
var isPresented: Binding<Bool> {
get { self[IsPresented.self] }
set { self[IsPresented.self] = newValue }
}
}
extension View {
func isPresented(_ isPresented: Binding<Bool>) -> some View {
environment(\.isPresented, isPresented)
}
}
struct ContentView : View {
@State private var isPresented = false
var body: some View {
ChildView().environment(\.isPresented, $isPresented)
}
}
struct ChildView : View {
@Environment(\.isPresented) var isPresented: Binding<Bool>
var body: some View {
Button("Test") {
isPresented.wrappedValue = true
}
.fullScreenCover(isPresented: isPresented) {
Text("Sheet")
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3230 次 |
最近记录: |