I searched SO for the best solution to this question, found several clues, while not fully satisfying IMO. So I post below my no-code solution. The goal is to have, as in Finder or other native applications, a contextual menu on the header bar of a table or outline, allowing to select which columns are visibles.
NSTableView (or NSOutlineView) column hiding through contextual menu : a "no code" solution
99 Views Asked by Max_B At
1
There are 1 best solutions below
Related Questions in NSTABLEVIEW
- How to create a table cell view like this similar to native not app notification view
- NSTableView to NSOutlineView Drag & Drop not accepting drop
- How to remove horizontal line in bottom of section NSTableView?
- Identify modified row for NSTableView bound with NSArrayController
- NSTableView.reloadData(forRowIndexes:columnIndexes:) causes wrong subview layout when usesAutomaticRowHeights = true
- Calculate/Display NSTableView column sum
- NSTableView is unresponsive when presented in NSApp.runModal(for:)
- NSTableView hangs when scrolled down in fullscreen mode
- NSTableView cell value may remain with invalid value after validateValue(_:forKey:) failed. How to prevent this?
- How do I vertically align text in a custom table
- Unable to remove left & right borders on NSTableview in an NSScrollView
- NSTableView multi-column drag reorder rows and include all columns
- Using Swift, how can I get the x-coordinate of an NSTableColumn while it is being dragged
- How can I update the datasource presented in a programmatically created NSTableView
- NSTableView does not show last column
Related Questions in APPKIT
- Add Keyboard Shortcut to MenuBar command AppKit macOS
- How to create a table cell view like this similar to native not app notification view
- Status bar icon disappear after switching wallpaper (Appkit on MacOS 14)
- Window "yanks" when moving
- Writing NSFilePromiseProviders to pasteboard blocks app on quit
- NSTokenField suggestion using context menu in swift
- How to link multiple text views to a single text storage in TextKit 2
- How to create a full screen overlay cover on macos using swift?
- How to open Settings from menu bar app and show app icon in dock?
- How do I implement a custom divider in NSSplitViewController?
- Is there a way to determine if any text input was active in a MacOS app after the app was backgrounded?
- Why is restoreWindow(withIdentifier:state:) called after applicationDidFinishLaunching(_:)?
- Oblique text: Creating NSFont with a textTransform changes the size to 1 pt
- Crash When Clicking on Definition View Created by AppKit's showDefinition(for:at)
- How to Set isEditable and isSelectable for SwiftUI's TextEditor?
Related Questions in COCOA-BINDINGS
- Bindings in NSPopUpButtonCell
- string.length keypath binding crashes during nib decode on Sonoma
- NSTableView cell value may remain with invalid value after validateValue(_:forKey:) failed. How to prevent this?
- Cocoa Bindings: binding each menu item of a NSPopUpButton, so that it can be enabled/disabled individually
- Can you save the selection of a master-detail bound NSTableView?
- MacOS: How to update an AppDelegate property via editing a table view cell?
- How do I add my own properties to the Bindings Inspector in Xcode?
- Cocoa Bindings on macOS
- Using INotifyPropertyChanged view models with Cocoa/AppKit bindings
- What are the best practices for using objectIsForced with controls bound to a shared user defaults controller?
- NSTableView (or NSOutlineView) column hiding through contextual menu : a "no code" solution
- Subclassing NSImageView with the binding ability
- Can't update dictionary connected to NSDictionaryController
- How to wire up a custom view using NSViewController to a model?
- Using Core Data and Cocoa Bindings in multiple storyboard scenes
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
In IB storyboard, add all the columns you need into the table view. You may set some of them hidden by default.
Ctrl-drag each column from the IB document outline view to the scene controller code view, in order to automatically create weak IBOutlets for each column. The purpose is to be able to target a given column in bindings.
Add a menu to the storyboard scene with the same number of item as the columns you plan to hide. You do not have to give title to menu items (see next point).
For each menu item, in the bindings pane, add two bindings :
titleto the columntitleproperty through your controller outlet :controller_name.my_column.title. This way the menu item will stay in sync with column title, should the code need to change it.valueof the menu item to the columnhiddenproperty :controller_name.my_column.hidden. Add aNSNegateBooleantransformer for the menu tick to be meaningful.Attach the menu to header menu : ctrl-click on the table header view and make connection from the menu outlet to the menu created in #3.
That it's. No code beside the IBOutlets added in #2.
The bindings being two ways, un-ticking a menu item will hide the bound column. Also, if the code hides a column the bound menu item will reflect its state.