我如何使一个删除按钮从列表中删除一个项目(macOS应用程序)?



我正在创建一个Notes风格的应用程序。我希望用户能够删除笔记而不必"滑动删除"。所以我不想使用。ondelete .

我有一个垃圾桶图标旁边的笔记名称,我希望用户按下删除。我知道这可以在iOS应用程序中使用。ontapgesture,但我不确定如何在macOS应用程序中做到这一点。

如果不能这样做,另一个选择是在工具栏上创建一个删除按钮。再一次,我不确定如何实现代码删除列表时,按下按钮。

下面是我在列表视图中所做的尝试:

import SwiftUI
struct NoteListView: View {
let myNotes: [MyNoteViewModel]
var body: some View {
List(myNotes) {myNote in
HStack{
NoteCellView(noteModel: myNote)
Image(systemName: "trash")
// where to potentially implement deletion when trash icon is pressed. 
}
}

}
}

NoteCellView:

struct NoteCellView: View {

let noteModel: MyNoteViewModel
var body: some View {
HStack{
Image(systemName: "folder")
Text(noteModel.name)
Spacer()
}
}
}

MyNoteViewModel:

struct MyNoteViewModel: Identifiable{
private let myNote: MyNote

init(myNote: MyNote){
self.myNote = myNote

}
var id: NSManagedObjectID{
myNote.objectID
}

var name: String {
myNote.name ?? ""
}
}

你也可以在macOS上使用onTapGesture:)
但是注释列表必须是一个@State或@StateObject变量,否则你不能改变(或删除)它。

下面是一个简化的例子:

struct NoteListView: View {

@State var myNotes = ["note 1", "note 2", "note 3", "another note"]
var body: some View {
List(myNotes, id: .self) { myNote in
HStack{
Text(myNote)
Image(systemName: "trash")
.onTapGesture {
if let index = myNotes.firstIndex(of: myNote) {
withAnimation {
myNotes.remove(at: index)
}
}
}
}
}
}
}

最新更新