【问题标题】:SwiftUI rename SideBar itemSwiftUI 重命名 SideBar 项
【发布时间】:2020-07-29 03:19:16
【问题描述】:

我正在使用 SwiftUI 并创建一个 SlideMenu,我想重命名我的菜单项。我通过将 Text 更改为 TextField 来做到这一点,但默认情况下禁用 TextField。 TextField 有什么问题,我无法点击它或者有什么方法可以在不交换 Text 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")
                }
            }
        }
    }
}

【问题讨论】:

  • 更新:其实可以点击编辑,但是很辛苦。我认为这是一个测试版错误,Apple 将在该功能中修复它。
  • 9个月后,不知您的问题解决了吗?

标签: swiftui


【解决方案1】:

我不认为它被禁用(测试提供的代码),你只是看到占位符和 TextField 默认不在焦点。

所以这是可能的解决方案(基于来自this answerCustomTextField

    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 的可能性

【讨论】:

  • 感谢您的帮助,它可以点击但非常难,我认为这是测试版的错误。顺便说一句,我为 Mac 编写了这个应用程序,但你的建议真的很有帮助。如果 Apple 在 10 月份没有修复它,我会尝试使用 NSTextField。
猜你喜欢
  • 1970-01-01
  • 2018-03-04
  • 2011-01-03
  • 2014-05-14
  • 2017-04-29
  • 2016-08-03
  • 2021-09-20
  • 1970-01-01
相关资源
最近更新 更多