ios - SwiftUI 从外部视图跟踪“选定”(点击)TextField
问题描述
我有一个卡片视图,其中包含从 CoreData 绘制的 TextField 列表,例如:
var body: some View {
ZStack {
ForEach(textsArray, id:\.self) { text in
TextFieldView(textBlock: text, editing: editing)
.onTapGesture(count: 1) {
selected.selectedText = text
}
}
}
}
文本字段将其内容和颜色存储在 CoreData 中。
此卡由编辑视图显示。编辑视图还包含一个 ColorPicker,它应该允许您修改所选文本字段的颜色。因此,如果用户点击文本字段并开始对其进行编辑,则屏幕一角将出现一个颜色选择器,以允许他们修改该字段的颜色。
我试图创建一个可观察的对象来跟踪选定的文本字段:
class Selection:ObservableObject {
@Published var selectedText : TextBlock?
}
然后我的编辑视图将简单地跟踪选定的文本:
@ObservedObject var selected : Selection = Selection()
它还将它传递到卡片视图中。
问题是 ColorPicker 视图需要绑定到 CGColor。我不确定如何将此绑定传递给 ColorPicker:我试过这个:
ColorPicker("", selection: self.selected.selectedText.$color)
但是 XCode 告诉我没有名为 $color 的选定文本的成员,我猜这是因为颜色是 @NSManaged 而不是 @State 属性。
如何将 Color 属性的绑定传递给颜色选择器?我是否以正确的方式接近这个?我是 iOS 开发的新手,所以我不知道惯用的做事方式是什么。
解决方案
您可以将其分成其他视图并调用
if self.selected.selectedText != nil {
MyColorPicker(selection: self.selected.selectedText!)
}
在哪里
struct MyColorPicker: View {
@ObservedObject var selection: TextBlock
var body: some View {
ColorPicker("", selection: self.$selection.color)
}
}
推荐阅读
- xaml - 如何删除框架 Xamarin 表单之间的空白
- python - 如何使用 pandas 将 xml 转换为 dataFrame
- python - 列表引用
- node.js - 无法使用 mongoose 连接到 mongoDB Atlas:{ MongoNetworkError: failed to connect to server }
- android - android画布动画背景?
- django - django 如何在views.py中使用减法
- postgresql - 从 *inside* docker 容器到 Mac 上主机的 postgres localhost 实例的 Docker postgres 连接
- python - 函数定义的迭代
- php - 此集合实例上不存在 laravel 属性 [id]
- ios - POST API 调用突然在 iOS 中发送错误消息