Post

Replies

Boosts

Views

Activity

How to select a list item with mouse right-click?
I'm building a sidebar that behaves the same as in the macOS Notes app. I'd like that a list item gets selected when right-clicking it. I've been looking into events and gestures and couldn't find anything for a right-click. It seems like they're all built for iOS, not macOS, though something surely exists if it's in the Notes app. Does anybody know how it's done? Below is my sidebar view. The view just has a basic structure to display a list in a sidebar. Currently, when right-clicking an item, a context menu is being displayed, though the menu item isn't getting selected. struct Sidebar: View { &#9;&#9;@Environment(\.managedObjectContext) &#9;&#9;private var viewContext &#9;&#9;@FetchRequest(entity: Element.entity(),&#9;sortDescriptors: [NSSortDescriptor(keyPath: \Element.title, ascending: false)]) &#9;&#9;private var elements: FetchedResults<Element> &#9;&#9; &#9;&#9;@AppStorage("SelectedElementId") &#9;&#9;var selectedElementId: String? &#9;&#9; &#9;&#9;var body: some View { &#9;&#9;&#9;&#9;VStack (alignment: .leading) { &#9;&#9;&#9;&#9;&#9;&#9;List (selection: self.$selectedElementId){ &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;ForEach(self.elements) { element in &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;NavigationLink(destination: ContentView(), tag: element.id!, selection: self.$selectedElementId) { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Text(element.title!) &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;.contextMenu { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Button(action: {}) { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Text("Delete") &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;}.listStyle(SidebarListStyle()) &#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;&#9;&#9;Button(action: addElement) { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;HStack { &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;Text("Add element") &#9;&#9;&#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;&#9;&#9;} &#9;&#9;&#9;&#9;} &#9;&#9;} &#9;&#9; &#9;&#9;private func addElement() { &#9;&#9;&#9;&#9;let element = Element(context: viewContext) &#9;&#9;&#9;&#9;element.id = UUID().uuidString &#9;&#9;&#9;&#9;element.title = "My title" &#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;self.selectedElementId = element.id &#9;&#9;&#9;&#9;&#9;&#9;&#9; &#9;&#9;&#9;&#9;do { &#9;&#9;&#9;&#9;&#9;&#9;try viewContext.save() &#9;&#9;&#9;&#9;} catch { &#9;&#9;&#9;&#9;&#9;&#9;let nsError = error as NSError &#9;&#9;&#9;&#9;&#9;&#9;fatalError("Unresolved error \(nsError), \(nsError.userInfo)") &#9;&#9;&#9;&#9;} &#9;&#9;} }
0
0
617
Jan ’21
Disable the deselection of a List item
I have a very basic List with a few NavigationLink items inside. When clicking "⌘ + Mouse left-click" on a selected list item, it gets deselected. I'd like this behaviour disabled, so nothing should happen. How can I do that? struct Sidebar: View {   var body: some View {     VStack(alignment: .leading) {       List {         NavigationLink(destination: Text("Destination"), label: { Text("Link1") })         NavigationLink(destination: Text("Destination"), label: { Text("Link2") })         NavigationLink(destination: Text("Destination"), label: { Text("Link2") })       }       .listStyle(SidebarListStyle())     }   } }
1
0
806
Jan ’21