gpt4 book ai didi

objective-c - NSTableView 允许用户选择要显示的列

转载 作者:太空狗 更新时间:2023-10-30 03:31:23 24 4
gpt4 key购买 nike

谁知道如何让用户通过右键单击然后选择来选择要显示的 NSTableView 的列?就像 iTunes 一样。

最佳答案

我已经实现了这个,下面的应该可以在没有任何子类化的情况下使用。

首先在IB中实现一个空菜单,并连接到Table Header View的菜单输出。

此方法(从 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;
}

这将调用以下内容来执行实际的隐藏/取消隐藏

- (void)toggleColumn:(id)sender {
NSTableColumn *col = [sender representedObject];
[col setHidden:![col isHidden]];
}

您还需要设置菜单的委托(delegate)并实现以下设置状态:-

#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];
}
}

关于objective-c - NSTableView 允许用户选择要显示的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13553935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com