当我右键单击我的 TableView 标题 (NSTableHeaderView) 时,我会弹出一个菜单以允许用户更改列颜色。问题是我不知道他们刚刚“右键单击”了哪一列。关于如何做到这一点的任何想法?谢谢。
最佳答案
最简单的方法是在 NSTableHeaderView
的子类中实现 -menuForEvent:
。
在我的应用中,我使用了一个更通用的解决方案。我向 NSTableHeaderView 添加了一个委托(delegate)。当请求菜单时,我的类(class)要求委托(delegate)人验证菜单并将其传递给单击的表列。然后委托(delegate)自定义菜单(启用菜单项,根据单击的列设置菜单项状态),并记住在实例变量中单击了哪一列。
PGETableViewTableHeaderView.h
#import <Cocoa/Cocoa.h>
@protocol PGETableViewTableHeaderViewDelegate <NSObject>
-(void)validateMenu:(NSMenu*)menu forTableColumn:(NSTableColumn*)tableColumn;
@end
@interface PGETableViewTableHeaderView : NSTableHeaderView
@property(weak) IBOutlet id<PGETableViewTableHeaderViewDelegate> delegate;
@end
PGETableViewTableHeaderView.m
#import "PGETableViewTableHeaderView.h"
@implementation PGETableViewTableHeaderView
-(NSMenu *)menuForEvent:(NSEvent *)event {
NSInteger clickedColumn = [self columnAtPoint:[self convertPoint:event.locationInWindow fromView:nil]];
NSTableColumn *tableColumn = clickedColumn != -1 ? self.tableView.tableColumns[clickedColumn] : nil;
NSMenu *menu = self.menu;
[self.delegate validateMenu:menu forTableColumn:tableColumn];
return menu;
}
@end
这很方便:将自定义子类分配给 IB 中的标题 View ,然后连接 menu
和 delegate
outlets。
关于objective-c - 在 NSTableHeaderView 中右键单击了哪一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15317612/