我正在仅使用 SwiftUI 开发 macOS 应用程序。我正在尝试实现一个类似于 Finder 或 Notes 等原生 Apple 应用程序中的侧边栏,其中可以重新排列和重命名项目。
在我的侧边栏中,每个项目都是一个包含 TextField 的 NavigationLink。我已经成功复制了本机应用程序中看到的以下行为:
但是,重新排列项目后,使用 Return 键重命名项目的功能(行为 2)将停止工作。
鉴于这些是 Mac 应用程序中的基本 UI 行为,我相信它们应该很容易在 SwiftUI 中实现。但是,我找不到任何关于将 TextField 放置在 NavigationLink 中并使用 Return 键聚焦的官方文档(甚至在重新排列项目之前)。
有人对这个问题有什么见解或建议吗?
我使用以下代码构建了一个 SwiftUI 视图。
struct SidebarListView: View {
var items: [Item]
var body: some View {
List {
ForEach(self.items) { item in
ItemView(item: item)
}
.onMove(perform: self.moveItem)
}
}
// Additional code...
}
struct ItemView: View {
var item: Item
@State private var newTitle: String = ""
var body: some View {
NavigationLink {
Text(self.item.title)
} label: {
Label {
TextField(text: self.$newTitle) {}
.onSubmit(self.renameItem)
} icon: { Image(systemName: "folder") }
}
}
// Additional code...
}
尝试这种方法(假设 Item 是一个结构),使用绑定,例如:
在
SidebarListView
有
@State private var items: [Item] = [...]
ForEach($items) { $item in
ItemView(item: $item)
}
并在您的
ItemView
中声明:
@Binding var item: Item