我正在创建一个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)
}
}
}
}
}
}
}