[英]How can I dynamically add SwiftUI Views to a parent View?
是否可以以动态和编程方式将多个 SwiftUI 视图添加到父视图?
例如,假设我们有一个基本视图,例如:
struct MyRectView: View {
var body: some View {
Rectangle()
.fill(Color.red)
.frame(width: 200, height: 200)
}
}
一个 Button 定义为:
struct MyButtonThatMakesRects: View {
var body: some View {
Button(
action: {
// Create & add Views to parent here?
// ...
},
label: {
Text("tap to create a Rect")
}
)
}
}
当点击MyButtonThatMakesRects
时,有什么方法可以在父视图中创建多个MyRectView
实例?
我最初的想法与我将如何在 UIKit 中执行此操作一致。 正在点击按钮,创建一个新的UIView()
,然后使用.addSubview(...)
将其添加到父级。 不确定 SwiftUI 是否具有类似的功能。 或者也许有一种我没有看到的更简单的方法来做到这一点?
SwiftUI 是函数式和反应式的,所以它的 output 完全是 state 的反映。 您必须存储和操作 state 以产生具有所需结果的 SwiftUI 视图。 每次 state 更改时,视图都会从头开始重建。 (不是真的,因为引擎盖下有一些有效的差异,但它是一个很好的心理 model 使用。)
SwiftUI 提供的最简单方法是@State
属性包装器,因此您要求的版本看起来像这样:
struct RootView: View {
@State private var numberOfRects = 0
var body: some View {
VStack {
Button(action: {
self.numberOfRects += 1
}) {
Text("Tap to create")
}
ForEach(0 ..< numberOfRects, id: \.self) { _ in
MyRectView()
}
}
}
}
我猜你想要的最终结果比这更复杂,但你可以使用@State
或使用指向一个单独的 class 的属性来处理你的状态/模型,用@ObservedObject
包装器标记,以获得你需要的任何东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.