swift - SwiftUI 将覆盖内容传递给父视图
问题描述
MainView
并AnotherMainView
包含名称数组。它们遍历这些数组并且都使用DetailView
来显示带有一些附加内容的名称。MyViewModel
提供一些功能,例如添加名称等。这些应该从DetailOverlayView
使用所选名称的操作触发(请参阅代码注释。
我的问题是,DetailView
在“单元格”内开始一个非常小的覆盖结果,DetailView
这不是我想要的。这就是为什么我想在父视图上显示它。不幸的是,我不知道如何将 传递DetailOverlayView
给MainView
and AnotherMainView
。我尝试使用绑定或环境,但这不起作用。我想避免冗余,例如在两个父视图中定义叠加层等。
或者,也许有一个解决方案可以从 DetailView 调用它,但绕过详细视图框架而不提供一些硬编码的高度和宽度值。
struct MainView: View {
@StateObject var viewModel: MyViewModel
var names = ["aaa", "ccc", "ddd", "gght"]
var body: some View {
VStack {
ForEach(names, id: \.self, content: { name in
DetailView(name: name).environmentObject(viewModel)
})
}///.overlay(... -> need DetailOverlayView here
}
}
struct AnotherMainView: View {
@StateObject var viewModel: MyViewModel
var names = ["bbb", "hhh"]
var body: some View {
VStack {
ForEach(names, id: \.self, content: { name in
DetailView(name: name).environmentObject(viewModel)
})
}///.overlay(... -> need DetailOverlayView here
}
}
struct DetailView: View {
@EnvironmentObject var viewModel: MyViewModel
@State var name: String
var body: some View {
VStack {
Text("Name of the user: ")
Text(name)
}///.overlay(... -> this would show an DetailOverlayView as a part of this small DetailView and in its bounds which is not what I want
}
struct DetailOverlayView: View {
@Binding var name: String ///this is the same name that the DetailView has, not sure if binding makes sense here
@EnvironmentObject var viewModel: MyViewModel
var body: some View {
VStack {
Button(action: {
viewModel.addName(name: name)
}, label: {
Text("Add name")
})
Button(action: {
viewModel.doSomething1(name: name)
}, label: {
Text("doSomething1")
})
Button(action: {
viewModel.doSomething2(name: name)
}, label: {
Text("doSomething2")
})
}
}
}
}
class MyViewModel: ObservableObject {
func addName(name: String) {
///
}
func doSomething1(name: String) {
///
}
func doSomething2(name: String) {
///
}
}
解决方案
推荐阅读
- android - 在 Android 中设置相机焦距
- fortran - 如何在 OpenVMS Fortran 中获取命令行参数?
- python - 正则表达式程序从包含 2 个数字且它们不相邻的句子中打印单词
- javascript - REACT : 当子组件出错时隐藏父组件
- azure-active-directory - 在 AAD 组中添加外部用户以访问 Power BI 工作区
- twitter-bootstrap - 容器没有相同的边距
- mysql - MySQL 5.7 如何将主查询数据传入子子查询
- mysql - 带有嵌套表的 Sequelize 中的“WHERE”子句
- java - 侦听多个 Azure 服务总线队列(动态列表)
- javascript - 反应框架。对象解构不起作用