我正在使用SwiftUI并创建一个SlideMenu,我想重命名我的菜单项。我通过将文本更改为TextField来完成此操作,但TextField默认情况下处于禁用状态。TextField有什么问题,我无法点击它,或者有什么方法可以在不交换文本的情况下重命名<-> TextField?

struct CellView: View {
@State private var isRename = false
@State private var newName: String = ""
var menuItem: MenuItem
var body: some View {
HStack {
Image(systemName: "folder")
.foregroundColor(.accentColor)
if isRename {
TextField(menuItem.name ?? "Unknow name", text: $newName)
}else {
Text(menuItem.name ?? "Unknow name")
}
Spacer()
}
.contextMenu {
Button(action: {
isRename = true
}) {
HStack {
Image(systemName: "pencil")
.foregroundColor(.accentColor)
Text("Rename")
}
}
}
}
}发布于 2020-07-29 11:44:20
我不认为它是禁用的(正如测试提供的代码),你只看到占位符,TextField默认不在焦点中。
所以这里有一个可行的解决方案(基于this answer的CustomTextField )
if isRename {
CustomTextField(text: $newName,
nextResponder: .constant(nil),
isResponder: .constant(true),
isSecured: false,
keyboard: .default)
}else {
Text(menuItem.name ?? "Unknow name")
}
Spacer()
}
.contextMenu {
Button(action: {
newName = menuItem.name ?? "Unknown name"
isRename = true
}) {注意:没有显示什么是MenuItem,但考虑了将文本字段直接绑定到menuItem.name的可能性
https://stackoverflow.com/questions/63145829
复制相似问题