首页 > 解决方案 > 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 开发的新手,所以我不知道惯用的做事方式是什么。

标签: iosswiftswiftui

解决方案


您可以将其分成其他视图并调用

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)
  }
}

推荐阅读