Dav*_*mes 8 macos cocoa objective-c nsmenu nstableview
任何人都知道如何通过右键单击然后选择允许用户选择显示NSTableView的哪些列?就像iTunes一样.
我实现了这个,以下应该可以使用,没有任何子类.
首先在IB中实现一个空菜单并连接到表头视图的菜单输出.
此方法(从awakeFromNib调用)从标头构造菜单的内容(并包括一个测试以防止用户隐藏主列)
- (void)initViewHeaderMenu:(id)view {
//create our contextual menu
NSMenu *menu = [[view headerView] menu];
//loop through columns, creating a menu item for each
for (NSTableColumn *col in [view tableColumns]) {
if ([[col identifier] isEqualToString:COLUMNID_NAME])
continue; // Cannot hide name column
NSMenuItem *mi = [[NSMenuItem alloc] initWithTitle:[col.headerCell stringValue]
action:@selector(toggleColumn:) keyEquivalent:@""];
mi.target = self;
mi.representedObject = col;
[menu addItem:mi];
}
return;
}
Run Code Online (Sandbox Code Playgroud)
这将调用以下内容来进行实际的隐藏/取消隐藏
- (void)toggleColumn:(id)sender {
NSTableColumn *col = [sender representedObject];
[col setHidden:![col isHidden]];
}
Run Code Online (Sandbox Code Playgroud)
您还需要设置菜单的委托并实现以下设置状态: -
#pragma mark NSMenu Delegate Methods
-(void)menuWillOpen:(NSMenu *)menu {
for (NSMenuItem *mi in menu.itemArray) {
NSTableColumn *col = [mi representedObject];
[mi setState:col.isHidden ? NSOffState : NSOnState];
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1969 次 |
| 最近记录: |