gpt4 book ai didi

swiftui - SwiftUI 列表中的可编辑文本字段

转载 作者:行者123 更新时间:2023-12-04 04:39:45 30 4
gpt4 key购买 nike

更新 : 14 个月后,AppKit 发行说明中有这样一个有趣的说明:

A TextField that you are editing inside a selected List row now has correct text foreground colors. (68545878)


现在,当将 TextField 放入 List 时,TextField 在第一次被选中时变为焦点,但随后的编辑尝试失败:List 行被选中,但 TextField 没有获得焦点。
输出/输出:
在 beta6 SwiftUI macOS(不是 iOS)应用,我需要一个 List带有可编辑的文本字段,但 TextField列表中的 s 不可编辑。如果我换掉 List 就可以了对于 Form (或只是 VStack ),但我需要它与 List 一起使用.是否有一些技巧可以告诉列表使字段可编辑?
import SwiftUI

struct ContentView: View {
@State var stringField: String = ""

var body: some View {
List { // works if this is VStack or Form
Section(header: Text("Form Header"), footer: Text("Form Footer")) {
TextField("Line 1", text: $stringField).environment(\.isEnabled, true)
TextField("Line 2", text: $stringField)
TextField("Line 3", text: $stringField)
TextField("Line 4", text: $stringField)
TextField("Line 5", text: $stringField)
}
}
}
}

最佳答案

下面的代码只是一个实验,用来理解 SwiftUI 中 List 的特性,并展示一个替代方案。我通过观察各种组合的输出了解到,List View 的样式的结构方式是覆盖底层 View 的默认行为以变为 Selectable。这意味着 TextField 完全不同。 TextField 是一个可聚焦的元素,我们可以在其中输入。此聚焦变量未连接到 ListView 以协同工作。因此,List 会覆盖默认的可聚焦。因此无法使用 TextView 创建列表。但是,如果您需要,下一个最佳选择是 ScrollView 而不是 List 并明确地进行样式设置。检查以下代码和两种方式。

import SwiftUI

struct ContentView: View {
@State private var arr = ["1","2","3"]
var body: some View {
HStack {
VStack {
List {
ForEach(self.arr.indices, id:\.self) {
TextField("", text: self.$arr[$0])
}
}
}
.frame(minWidth: 150, maxWidth: .infinity, minHeight: 300, maxHeight: .infinity)
VStack {
ScrollView {
ForEach(self.arr.indices, id:\.self) {
TextField("", text: self.$arr[$0])
.textFieldStyle(PlainTextFieldStyle())
.padding(2)
}
}
.padding(.leading, 5)
.padding(3)
}
.background(Color(NSColor.alternatingContentBackgroundColors[0]))
.frame(minWidth: 150, maxWidth: .infinity, minHeight: 300, maxHeight: .infinity)
}
}
}

extension NSTextField {
open override var focusRingType: NSFocusRingType {
get { .none }
set { }
}
}

关于swiftui - SwiftUI 列表中的可编辑文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57576128/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com